Thanks! That helped. :)
The code for the tag was as follows: import re from django.template import Variable, VariableDoesNotExist, Node, Library, Template, TemplateSyntaxError, Context, loader 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 try: # newsitems = NewsItem.objects.all().order_by('-created_at') # newsitems = NewsItem.objects.visible().order_by('- news_timestamp') newsitems = NewsItem.objects.filter(Q(expires_at__gt = datetime.now()) | Q(expires_at__isnull = True), effective_at__lte = datetime.now(), is_active=True).order_by('-news_timestamp') except: newsitems = None class NewsItemBlockNode(Node): def __init__(self, identifier, field): self.identifier = str(identifier) self.field = str(field) self.image = False def render(self, context): global newsitems 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 if self.identifier in numbers: number = numbers[self.identifier] try: newsitem = getattr(newsitems[number], self.field) if type(newsitem).__name__ == 'datetime': if self.identifier in ['medium', 'large']: 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') newsitem = newsitem.upper() else: newsitem = newsitem.strftime('%d-%m-%Y') if self.image: # Filter only image src = re.search('<img(.+)src="(.*?)"(.+)/>', newsitem) if src and src.group(2): newsitem = src.group(2) else: newsitem = '/media/site/img/blank.gif' elif self.field == 'teaser': # Filter image newsitem = re.sub('<img (.+) />', '', newsitem) newsitem = re.sub('<a.*?>', '', newsitem) newsitem = re.sub('</a>', '', newsitem) newsitem = re.sub(' ', '', newsitem) except: newsitem = '' return mark_safe(newsitem) @register.tag() def show_newsitem(parser, token): try: tag, identifier, field = token.split_contents() except ValueError: raise TemplateSyntaxError('%s needs newsitem number (x latest newsitem) as an argument.' % tag) return NewsItemBlockNode(identifier, field) ------ Looking at it again, I saw what was wrong and fixed it! For completeness, I moved the NewsItem query within the NewsItemBlockNode 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.all().order_by('- created_at') # newsitems = NewsItem.objects.visible().order_by('- news_timestamp') newsitems = NewsItem.objects.filter(Q(expires_at__gt = datetime.now()) | Q(expires_at_ except: 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 if self.identifier in numbers: number = numbers[self.identifier] try: newsitem = getattr(newsitems[number], self.field) if type(newsitem).__name__ == 'datetime': if self.identifier in ['medium', 'large']: 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') newsitem = newsitem.upper() else: newsitem = newsitem.strftime('%d-%m-%Y') if self.image: # Filter only image src = re.search('<img(.+)src="(.*?)"(.+)/>', newsitem) if src and src.group(2): newsitem = src.group(2) else: newsitem = '/media/site/img/blank.gif' elif self.field == 'teaser': # Filter image newsitem = re.sub('<img (.+) />', '', newsitem) newsitem = re.sub('<a.*?>', '', newsitem) newsitem = re.sub('</a>', '', newsitem) newsitem = re.sub(' ', '', newsitem) except: newsitem = '' return mark_safe(newsitem) @register.tag() def show_newsitem(parser, token): try: tag, identifier, field = token.split_contents() except ValueError: raise TemplateSyntaxError('%s needs newsitem number (x latest newsitem) as an argument.' % return NewsItemBlockNode(identifier, field) Thanks Michal and Daniel for your help! Wim On Jun 22, 8:24 pm, Daniel Roseman <dan...@roseman.org.uk> wrote: > On Wednesday, 22 June 2011 14:32:10 UTC+1, Wim Feijen wrote: > > > Hello, > > > Atwww.mkb-rotterdam.nlwe use a template tag to display NewsItems in > > different formats on the homepage. > > > However, when a new NewsItem is added, it does not appear at once. > > > Might this have to do with the fact that we use a template tag to get > > the NewsItems out of the db? > > > Our query is: > > > newsitems = NewsItem.objects.filter(Q(expires_at__gt = datetime.now()) > > | Q(expires_at__isnull = True), effective_at__lte = datetime.now(), > > is_active=True).order_by('-news_timestamp') > > > Or is datetime.now() fixed to the past? > > > What would be a proper way to solve this then? Maybe add a post-save > > signal but how could we use this then to refresh the tag? > > > If something else is the matter, or just if you're interested: we host > > our site using a virtual apache + mod_wsgi + nginx. > > > Thanks for your help! > > > Wim > > Please show the full code for the templatetag. > -- > DR. -- 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.