4

Django アプリに、ページに表示されているグループ (Django ユーザー グループではなく、アプリのカスタム) に関連するログイン ユーザーのステータスに応じて、次のいずれかを実行する必要があるページがあります。

  1. ユーザーがグループに参加できる場合は、グループに参加するためのリンクを表示します。
  2. ユーザーがグループに属している場合は、グループを脱退するためのリンクを表示します。
  3. ユーザーがグループに参加できない場合は、どちらのリンクも表示しないでください。

これを行う 1 つの方法は、3 つのテンプレート (1 つは参加リンク、1 つは脱退リンク、もう 1 つはリンクなし) を作成し、ビューで適切なテンプレートを選択することです。コードの 1 行だけが異なる 3 つの異なるテンプレートを用意するのはやり過ぎかもしれないと思うので、まだその方法には行っていません。

テンプレートだけを使って条件 1 と 2 の正しいコンテンツを表示することは不可能です。ユーザーとグループは多対多の関係であり、グループ メンバーシップを決定するには、ユーザーをグループに渡すか、グループをユーザーに渡す必要があります。

Django テンプレートでは関数の引数を渡すことができないため、get_context_data.

def get_context_data(self, **kwargs):
    context = super(NetworkDetails, self).get_context_data(**kwargs)
    user = ???
    context['in_group'] = user.in_group(context['group_detail'])
    return context

その場合、そのメソッド内で現在ログインしているユーザーを取得するにはどうすればよいですか? それが不可能な場合、テンプレート以外のどこでその情報を取得できますか? このようなことを行うための受け入れられた方法はありますか?

ありがとう!

4

3 に答える 3

5

これを行う 1 つの方法は、3 つのテンプレート (1 つは参加リンク、1 つは脱退リンク、もう 1 つはリンクなし) を作成し、ビューで適切なテンプレートを選択することです。

面白いことに、含めるテンプレートを選択できれば、表示する html を選択するだけで済みます。それ以外の:

{% if join_link %}
    {% include 'join_link.html' %}
{% endif %}
{% if leave_link %}
    {% include 'leave_link.html' %}
{% endif %}
{% if not join_link and not leave_link %}
    you can't join
{% endif %}

あなたはただ持つことができます:

{% if join_link %}
    <a href="{{ join_link }}">join</a>
{% endif %}
{% if leave_link %}
    <a href="{{ leave_link }}">leave</a>
{% endif %}
{% if not join_link and not leave_link %}
    you can't join
{% endif %}

そのため、テンプレートの組み込みを使用する理由がわかりません。

その場合、そのメソッド内で現在ログインしているユーザーを取得するにはどうすればよいですか?

self.request.user
self.request.user.is_authenticated() # return True if the user is logged in
于 2012-07-12T14:38:04.157 に答える
0

ビューで条件を判断し、コンテキストを使用して適切なフラグをテンプレートに渡すことができます。

この情報を必要とするビュー/テンプレートが複数ある場合は、この情報をコンテキストに追加し、各テンプレートで使用できるカスタム コンテキスト プロセッサを実装できます。

または、アプリでOneToOne何らかの関係がある場合は、そのモデルにメソッドを実装できます。User

于 2012-07-12T14:40:31.177 に答える
0

アクセス許可https://docs.djangoproject.com/en/dev/topics/auth/を確認することで、ユーザーがログインしているかどうかを確認 できます。また、他のニーズについても同様のことができます。

于 2012-07-12T14:41:13.810 に答える