3

Django テンプレートのアクセス許可に小さな問題があります。

権限に基づいて、プロジェクトのメニュー バーにアイコンを表示しようとしています。ユーザーがプロジェクトに新しいフォローアップを追加する権限を持っている場合はアイコンが表示され、その権限がない場合はリンクが表示されないようにしたいと考えています。

私の許可構文はfollow.add_followup、印刷から取得したものuser.get_all_permissions()です。

テンプレートでこのコードを試しました:

...
{% if user.has_perm('followup.add_followup') %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
...

しかし、テンプレートを表示すると、次のエラーが表示されます。

/project/232/view/ の TemplateSyntaxError

残りを解析できませんでした: '(followup.add_followup)' from 'user.has_perm(followup.add_followup)'

何かご意見は?これは私に頭を悩ませてきました!:)

4

4 に答える 4

11

Djangoパーミッションシステムを使用しているので、次のテンプレート構文を使用することをお勧めします...

{%if perms.followup.add_followup%}your URL here{%endif%}

編集:Djangoは、モデルごとに「追加」、「変更」、「削除」の3つの権限を自動的に作成します。リンクを追加するためのモデルが存在しない場合は、モデルクラスメタに関連モデルからのアクセス許可を追加する必要があります...同様に:

somemodels.py

class SomeModel(Model):
    ...
    class Meta:
    permissions = (('add_followup','Can see add urls'),(...))

Django認証ユーザー管理ページで、あなたの許可を見ることができます。テンプレートレイヤーでは、基本的なDjangoスタイルで権限が提示されます。

<app_label>.<codename>

この場合、次のようになります。

{%if perms.somemodels.add_followup%}your URL here{%endif%}

やりたい仕事に関連するモデルがない場合は、モデルに権限を追加してください...

テンプレートには、次のように書くことができます

{{perms.somemodels}}

そのユーザーに使用可能なアクセス許可を封印します。ここで、somemodelは、そのモデルの1つにアクセス許可を追加するアプリケーションの名前です。

于 2011-02-03T16:33:34.943 に答える
2

回答#2の詳細を示すDjangoドキュメント: https ://docs.djangoproject.com/en/dev/topics/auth/#id9

現在ログインしているユーザーの権限は、テンプレート変数{{perms}}に保存されます。これはdjango.contrib.auth.context_processors.PermWrapperのインスタンスであり、テンプレートに適した権限のプロキシです。

于 2012-02-28T21:38:02.877 に答える
2

これは私の非常に単純なソリューションです。テンプレートにこれを追加します。

例えば:

.......

{% if 'user.can_drink' in user.get_all_permissions %}
   {{ user }} can drink.
   .......
{% else %}
   {{ user }} can´t drink.
    ........
{% endif %}

.......
于 2012-06-08T16:26:57.353 に答える
1

テンプレートでこのコードを試しました:

この種の複雑な意思決定は、ビュー関数で行われます。

または、テンプレートに提示されるコンテキストに入ります。

https://stackoverflow.com/search?q=%5Bdjango%5D+コンテキスト

コンテキスト プロセッサを使用する場合

あなたの見解でこれを行います

def my_view( request ):
    followup= user.has_perm('followup.add_followup')
    # etc.
    return render_to_response( template, {'followup':followup,... )

次に、テンプレートは単純です

{% if followup %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
于 2011-02-03T16:29:17.387 に答える