0

执行检查以查看用户是否参加。如何在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 %} 

过滤器.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 ''

谢谢!

4

1 回答 1

10

'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': ''}
于 2012-08-22T19:20:35.817 回答