我正在尝试检查用户是否正在参加活动列表中的活动。如果他们是,很酷:说他们已经“注册”了。如果没有,请将注册表单放入模板中。
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形式,因为它只是一个按钮。
提前感谢您的意见。
答案 0 :(得分:2)
不会将简单标记解析为模板。您应该使用包含标记,并将HTML(加上if / else逻辑)放在单独的模板中。
答案 1 :(得分:0)
您确定需要标签吗?尝试将逻辑放入模板中(未经测试)
{if profile in attendees}
<a href='#' class='button'>Thanks for Registering!</a>
{else}
<form> ...></form>
{endif}