Передайте контекстную переменную через тег включения
Выполнение проверки, чтобы увидеть, присутствует ли пользователь или нет. Как передать переменную контекста is_attending
к шаблону без получения синтаксической ошибки на 'is_attending': context['is_attending']
? Проверка в основном для стилей div и еще много чего. Что я делаю неправильно?
шаблон:
{% 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 ''
Спасибо!
1 ответ
'is_attending': context['is_attending']
не является действительным питоном. Скорее это похоже на частичный словарь. поскольку .inclusion_tag()
код должен возвращать слово, возможно, вы имели в виду следующее:
if profile in attendees:
return {'is_attending': context['is_attending']}
else:
return {'is_attending': ''}
Также обратите внимание, что takes_context
означает, что вы будете принимать только контекст в качестве аргумента. Из руководства по пользовательским тегам:
Если при создании тега шаблона вы укажете take_context, у тега не будет обязательных аргументов, а у базовой функции Python будет один аргумент - контекст шаблона по состоянию на момент вызова тега.
Таким образом, ваш тег должен быть:
{% registration %}
и ваш полный метод может взять event
аргумент прямо из контекста:
@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': ''}