Thanks Bruno for your detailed advice and attention!

I agree wholeheartedly.

Wim

On Jun 24, 12:53 pm, bruno desthuilliers
<bruno.desthuilli...@gmail.com> wrote:
> On Jun 24, 11:57 am,WimFeijen<wimfei...@gmail.com> wrote:
>
>
>
> > Looking at it again, I saw what was wrong and fixed it! For
> > completeness, I moved the NewsItem query within the NewsItemBlockNode
>
> FWIW, code at the module top-level is only executed when the module is
> first imported. Now you'll know ;)
>
>
>
>
>
>
>
>
>
> > and everything works fine! The current code is:
>
> > import re
>
> > from django.template import Variable, VariableDoesNotExist, Node,
> > Library, Template, TemplateSynta
> > from django.conf import settings
> > from django.utils.safestring import mark_safe
> > from django.utils.html import escape
> > from django.utils.translation import ugettext as _
>
> > register = Library()
>
> > from cms.news.models import NewsItem
> > from django.db.models import Q
> > from datetime import datetime
>
> > class NewsItemBlockNode(Node):
> >     def __init__(self, identifier, field):
> >         self.identifier = str(identifier)
> >         self.field      = str(field)
> >         self.image      = False
>
> >     def render(self, context):
> >         try:
> >             newsitems = NewsItem.objects.filter(Q(expires_at__gt =
> > datetime.now()) | Q(expires_at_
> >         except:
>
> Never use a bare except clause, unless you reraise the exception.
>
>
>
>
>
>
>
>
>
> >             newsitems = None
>
> >         number  = -1
> >         numbers = {
> >             'large':       0,
> >             'large-small': 0,
> >             'small1':      1,
> >             'small2':      2,
> >             'small3':      3,
> >             'small4':      4,
> >             'medium':      5,
> >         }
>
> >         # Only image
> >         if self.field == 'teaser-image':
> >             self.field = 'teaser'
> >             self.image = True
>
> Never change a Node's attributes from within the render method - this
> will screw you sooner or later. Use local variables instead (with the
> added bonus of improved performances - local variables are way faster
> than attribute lookups).
>
> >         if self.identifier in numbers:
> >             number = numbers[self.identifier]
>
> >         try:
> >             newsitem = getattr(newsitems[number], self.field)
>
> >             if type(newsitem).__name__ == 'datetime':
>
> you may want to read about "isintance"
>
> >                 if self.identifier in ['medium', 'large']:
>
> use a tuple instead of a list - it's cheaper.
>
> >                     newsitem = newsitem.strftime('%d [%m] %Y')
>
> >                     newsitem = newsitem.replace('[01]', 'januari')
> >                     newsitem = newsitem.replace('[02]', 'februari')
> >                     newsitem = newsitem.replace('[03]', 'maart')
> >                     newsitem = newsitem.replace('[04]', 'april')
> >                     newsitem = newsitem.replace('[05]', 'mei')
> >                     newsitem = newsitem.replace('[06]', 'juni')
> >                     newsitem = newsitem.replace('[07]', 'juli')
> >                     newsitem = newsitem.replace('[08]', 'augustus')
> >                     newsitem = newsitem.replace('[09]', 'september')
> >                     newsitem = newsitem.replace('[10]', 'oktober')
> >                     newsitem = newsitem.replace('[11]', 'november')
> >                     newsitem = newsitem.replace('[12]', 'december')
>
> You may want to have a read at Django's and Python's localisation
> features...
>
> >                     newsitem = newsitem.upper()
> >                 else:
> >                     newsitem = newsitem.strftime('%d-%m-%Y')
>
> >             if self.image:
> >                 # Filter only image
> >                 src = re.search('<img(.+)src="(.*?)"(.+)/>', newsitem)
>
> regexps are not the safest way to parse html.
>
> >                 if src and src.group(2):
> >                     newsitem = src.group(2)
> >                 else:
> >                     newsitem = '/media/site/img/blank.gif'
>
> Use named urls and reverse() instead - unless you are happy with
> maintenance headache, of course ;)
>
> >             elif self.field == 'teaser':
> >                 # Filter image
> >                 newsitem = re.sub('<img (.+) />', '', newsitem)
> >                 newsitem = re.sub('<a.*?>', '', newsitem)
> >                 newsitem = re.sub('</a>', '', newsitem)
> >                 newsitem = re.sub('&nbsp;', '', newsitem)
>
> Proverbial SquaredWheel alert. Django (and Python) have safer ways to
> strip a text from HTML tags and entities.
>
> >         except:
>
> Same as above. Exceptions and traceback are here to HELP you fixing
> your code, so don't shoot yourself in the foot by silently passing
> them.
>
> HTH

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to