0

ユーザーがイベントのリスト内のイベントに参加しているかどうかを確認しようとしています。そうであれば、「登録済み」だと言ってください。そうでない場合は、サインアップ フォームをテンプレートに挿入します。

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フォームは文字通り単なるボタンであるため、実際には使用しません。

ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

2

単純なタグはテンプレートとして解析されません。包含タグを使用し、両方の HTML (および if/else ロジック) を別のテンプレートに配置する必要があります。

于 2012-08-21T21:33:56.490 に答える
0

本当にタグが必要ですか?そのようなロジックをテンプレートに入れてみてください(テストされていません)

{if profile in attendees}
    <a href='#' class='button'>Thanks for Registering!</a>
{else}
    <form> ...></form>
{endif}
于 2012-08-21T21:39:31.810 に答える