Передайте контекстную переменную через тег включения

Выполнение проверки, чтобы увидеть, присутствует ли пользователь или нет. Как передать переменную контекста 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': ''}
Другие вопросы по тегам