从自定义模板标记传递表单

2024-05-21 03:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试检查用户是否正在参加事件列表中的事件。如果他们是,酷:说他们已经注册了。如果没有,则在模板中抛出一个注册表单。你知道吗

from django.core.context_processors import csrf

@register.simple_tag(takes_context=True)
def user_is_attending(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:
        return "<a href='#' class='button'>Thanks for Registering!</a>"
    else:
        return "<form method='POST' action='/event/{{ event.id }}/register/'><input type='hidden' name='csrfmiddlewaretoken' value='{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %}' ><input type='hidden' name='username' value='{{ request.user.username }}' /><button class='btn' type='submit'><div class='timeleft'>{{ event.date|timeuntil|split_timeuntil|safe }} left</div><div class='register-text'>Register<br/><span>for this Event</span></div></button></form>"
     # I apologize for the lengthy form

模板标签工作(它正确地检查)。但是,它返回:

  • event.date|timeuntil|split_timeuntil|safe left | Register for this event应为“还剩4天|注册此事件”

以及

  • 我得到一个CSRF verification failed. Request aborted错误。因为它没有正确通过?你知道吗

那我有什么选择呢?我可以从自定义模板标记传递表单吗?在本例中,我并不真正使用django表单,因为它实际上只是一个按钮。你知道吗

提前感谢您的意见。你知道吗


Tags: divformeventregister模板forrequestcontext
2条回答

你确定需要标签吗?试着像这样把逻辑放到模板中(未测试)

{if profile in attendees}
    <a href='#' class='button'>Thanks for Registering!</a>
{else}
    <form> ...></form>
{endif}

简单标记不作为模板进行分析。您应该使用一个包含标记,并将两个HTML(加上if/else逻辑)放在单独的模板中。你知道吗

相关问题 更多 >