python - Django 模板标签内的结果相同

标签 python django django-templates

有一个注册按钮可以为该特定事件创建一个参加者。(有效)。但是,单击“注册”后,模板会识别即将举行的中的每个事件的'is_attending'= True(已注册!)。

查看:

def index(request):
    upcoming = Event.objects.filter(date__gte=datetime.now())
    if request.user.is_authenticated():
        profile = Profile.objects.get(user=request.user)
    is_attending = False
    for event in upcoming:
        attendees = [a.profile for a in Attendee.objects.filter(event=event)]
        if profile in attendees:
            is_attending = True

模板

{% if is_attending %}
     <a><Registered!</a>
{% else %}
     <form>... registration form ... Register Now...

我猜发生的事情是:

event 1  : Registered!
event 2  : Registered!
event 3  : Registered!

当我需要的是:

event 1  : Registered!
event 2  : Register Now
event 3  : Register Now

我不太确定为什么这对我不起作用?如何循环以仅为那些已在 即将举行的 事件中注册的人返回 is_attending

型号:

class Attendee(models.Model):
    event = models.ForeignKey(Event)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    profile = generic.GenericForeignKey('content_type', 'object_id')

最佳答案

您重写了 is_attending 的值每次执行 for 循环时;您的模板看到(单个)值 is_attending根据最后一个事件是否在 upcoming 中设置出席者 request.user .

为了获得所需的行为,一 block is_attending 每个的信息 Event 。我认为最简单的方法是 with a custom template tag :

@register.simple_tag(takes_context=True)
def user_is_attending(context, event):
    if type(event) != Event:
        raise template.TemplateSyntaxError("Must provide event")
    request = context['request']
    if event.attendee_set.filter(profile__user=request.user).exists():
        return 'attending'
    else:
        return 'not attending'

然后,当您在模板中循环事件时:

{% user_is_attending event %}

您还可以考虑使用 assignment taginclusion tag根据您的需要。

关于python - Django 模板标签内的结果相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941570/

相关文章:

python - 模板标签包含预期在 Django 框架中找到的文件在哪里

python - “wiki_render”未收到参数 : 'request' 的值

python - Django:迭代自定义选择字段中的选项

Python - Django - cardav - 如何实现服务器

mysql - 将 mysql 推送到 heroku 时出现关系错误

python - 如何从 Django 模板中的 PK 获取对象?

python - 渲染到模板并获得响应

python - youtube-dl python 脚本中的自定义用户代理

python - python中的平面文件键值存储

python - Django _view_() 采用 1 个位置参数,但给出了 2 个