Performing a check to see whether or not a user is attending or not. How do I pass the context variable is_attending
to the template without getting a syntax error on 'is_attending': context['is_attending']
? The check is basically for styling divs and whatnot. What am I doing wrong?
template:
{% for event in upcoming %}
{% registration %}
{% if is_attending %}
Registered!
{% else %}
Register button
{% endif %}
yadda yadda divs...
{% endfor %}
filters.py
@register.inclusion_tag('events/list.html', takes_context=True)
def registration(context, event):
request = context['request']
profile = Profile.objects.get(user=request.user)
attendees = [a.profile for a in Attendee.objects.filter(event=event)]
if profile in attendees:
'is_attending': context['is_attending']
return is_attending
else:
return ''
Thank you!
'is_attending': context['is_attending']
is not valid python. Rather, it looks like a partial dictionary. Since .inclusion_tag()
code is supposed to return a dict, perhaps you meant the following instead:
if profile in attendees:
return {'is_attending': context['is_attending']}
else:
return {'is_attending': ''}
Also note that takes_context
means you'll only take the context as an argument. From the howto on custom tags:
If you specify takes_context in creating a template tag, the tag will have no required arguments, and the underlying Python function will have one argument -- the template context as of when the tag was called.
Thus your tag should be:
{% registration %}
and your full method can take the event
argument directly from the context:
@register.inclusion_tag('events/list.html', takes_context=True)
def registration(context):
request = context['request']
event = context['event']
profile = Profile.objects.get(user=request.user)
attendees = [a.profile for a in Attendee.objects.filter(event=event)]
if profile in attendees:
return {'is_attending': context['is_attending']}
else:
return {'is_attending': ''}