通过包含标签通过上下文变量(Pass a context variable through an i

2019-10-17 04:16发布

执行检查,以查看用户是否正在参加与否。 我如何通过上下文变量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 ''

谢谢!

Answer 1:

'is_attending': context['is_attending']是无效蟒。 相反,它看起来像一个局部的字典。 由于.inclusion_tag()代码应该返回一个字典,也许你的意思,而不是执行以下操作:

if profile in attendees:
    return {'is_attending': context['is_attending']}
else:
    return {'is_attending': ''}

还要注意的是takes_context意味着你需要上下文作为参数。 从上自定义标签HOWTO :

如果你在创建模板标签中指定takes_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': ''}


文章来源: Pass a context variable through an inclusion tag