web-dev-qa-db-ja.com

Django:ユーザーがスーパーユーザーでない場合、テンプレートの非表示ボタン

ログインしたユーザーがスーパーユーザーであるかどうかを認識するために、どのようにテンプレート/ビューを取得しますか?

ユーザーがスーパーユーザーでない場合、完全に非表示にしたい(テンプレート内の)フォームに特定のボタンがあります

どうやってそれをやりますか?

35
JohnnyCash

Userオブジェクトで is_superuser をチェックアウトします。

{% if request.user.is_superuser %}
    ...
    <button>...</button>
    ...
{% else %}
...
{% endif %}

EDIT:@ mustafa-0xコメントの後

上記では、Django.core.context_processors.request設定TEMPLATE_CONTEXT_PROCESSORSが含まれていることを前提としていますが、これはデフォルトではありません

TEMPLATE_CONTEXT_PROCESSORSのデフォルト設定

TEMPLATE_CONTEXT_PROCESSORS = (
    'Django.contrib.auth.context_processors.auth',
    'Django.core.context_processors.debug',
    'Django.core.context_processors.i18n',
    'Django.core.context_processors.media',
    'Django.core.context_processors.static',
    'Django.core.context_processors.tz',
#    'Django.core.context_processors.request',
    'Django.contrib.messages.context_processors.messages',
)

すでにDjango.contrib.auth.context_processors.authが含まれています(特にrequestコンテキストプロセッサは含まれていません)。つまり、ほとんどの場合、コンテキストに追加することなく{{ user }}にアクセスできます。ビュー経由で、またはrequestコンテキストプロセッサを有効にして、上記のように{{ request.user }}経由でユーザーにアクセスします。

80
Timmy O'Mahony

コメントで説明したように、テンプレートで自動的に使用可能なUserオブジェクトを使用できます。

{% if user.is_superuser %}
<div class="alert alert-success" role="alert">
You are logged in as {{user.first_name}}, here are the
<a href="/admin/">admin pages</a> for changing content.
</div>
{% endif %}

より適切なuser.is_staffを使用することもできます。

7
shuckc

実際に、ログインhtmlテンプレートの天気をチェックしようとすると、ユーザーはスーパーユーザーであるかどうかを確認できません。そして、あなたが望む場所にリダイレクトします。 start関数で見ることができるように、このようなことができます

0
Daud Ahmed