This is the final code which works in case it helps anyone else.
Thanks again.

In the template:

{% page_links category %}



In templatetags file

@register.tag(name="page_links")
def get_page_links(parser,token):

        tag_name, category = token.contents.split()

        return PageLink(category)


class PageLink(template.Node):

    def __init__(self, category):

        self.category = template.Variable(category)

    def render(self, context):
        cat = self.category.resolve(context)

        if cat=='business':
            pages=BusinessPage.objects.filter
(is_live=True).select_related().order_by('order')
        elif cat=='community':
            pages=CommunityPage.objects.filter
(is_live=True).select_related().order_by('order')
        elif cat=='tourism':
            pages=TourismPage.objects.filter
(is_live=True).select_related().order_by('order')

        else:
            pages = False


        context['pages'] = pages

        return ''



On Jan 29, 3:22 pm, phoebebright <phoebebright...@gmail.com> wrote:
> You understood perfectly.  It was just another case of my not
> understanding the documentation.  Your explanation makes perfect
> sense.
>
> Many thanks.
>
> On Jan 27, 6:45 pm, Eric Abrahamsen <gir...@gmail.com> wrote:
>
> > On Jan 28, 2009, at 1:52 AM, phoebebright wrote:
>
> > > I have duplicated as best I can the processing for handling variables
> > > incustomtemplatetagsmentioned in an earlier post but it's not
> > > working for me as I need the value of the variable before I parse it.
> > > Is there another way of making the variable available?
>
> > > The tag is being called from the tempalte with:
>
> > > {% page_links "category"  %}
>
> > > Where category is being passed into thetemplatefrom a view.  (also
> > > tried "{{category}}" and {{category}} and category)
>
> > > I want to use the value of category to determine which list of pages
> > > to return.
>
> > > I KNOW THIS DOESN"T WORK:
>
> > > @register.tag(name="page_links")
> > > def get_page_links(parser,token):
> > >    tag_name, cat = token.contents.split()
> > >    return PageLink(cat[1:-1])
>
> > > class PageLink(template.Node):
>
> > >    def __init__(self, cat):
>
> > >        cat=template.Variable(cat)
> > >        print cat   <---------------------  outputs category
> > >        if cat=='business':
> > >            pages=BusinessPage.objects.filter
> > > (is_live=True).select_related().order_by('order')
> > >        elif cat=='community':
> > >            pages=CommunityPage.objects.filter
> > > (is_live=True).select_related().order_by('order')
> > >        elif cat=='tourism':
> > >            pages=TourismPage.objects.filter
> > > (is_live=True).select_related().order_by('order')
>
> > >        else:
> > >            pages = False
>
> > >            self.pages = pages
>
> > >    def render(self, context):
> > >        context['pages'] = self.pages
>
> > >        return ''
>
> > I might be missing something you're trying to do here, but the usual  
> > method for resolving a variable in acustomtemplatetag is to first  
> > put it into the tag (without quotes) like so:
> > {% page_links category %}
>
> > Then attach that to your PageLink node in its __init__ method as a  
> > Variable:
> > self.cat =template.Variable(cat)
>
> > Then inside the render method first resolve it:
> > category = self.cat.resolve(context)
>
> > and then check the value of category against your various models. That  
> > all has to be done in render, not __init__, because context is only  
> > available in render.
>
> > This is all straight out of the 
> > docs:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#pass...
>
> > Apologies in advance if I've misunderstood what you're trying to do...
>
> > Eric
>
> > > This code works fine as long as I call it like this:
>
> > > {% page_links "business" %}
>
> > > @register.tag(name="page_links")
> > > def get_page_links(parser,token):
>
> > >        tag_name, cat = token.contents.split()
> > >        cat = cat[1:-1]
>
> > >        if cat=='business':
> > >            pages=BusinessPage.objects.filter
> > > (is_live=True).select_related().order_by('order')
> > >        elif cat=='community':
> > >            pages=CommunityPage.objects.filter
> > > (is_live=True).select_related().order_by('order')
> > >        elif cat=='tourism':
> > >            pages=TourismPage.objects.filter
> > > (is_live=True).select_related().order_by('order')
> > >        else:
> > >            pages = False
>
> > >        return PageLink(pages)
>
> > > class PageLink(template.Node):
>
> > >    def __init__(self, pages):
> > >        self.pages = pages
>
> > >    def render(self, context):
> > >        context['pages'] = self.pages
>
> > >        return ''
>
>
--~--~---------~--~----~------------~-------~--~----~
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