ユーザーが特定のグループに属しているかどうかをテンプレートで確認する方法は?
view
を生成しているtemplate
で可能ですが、拡張テンプレートであるbase.html
でこれを確認したい場合(独自のビュー関数はありません) ?
私のテンプレートはすべてbase.html
を拡張しているため、各view
でチェックするのは良くありません。
base.html
には上のバーが含まれ、group
にログインしたユーザー(顧客、売り手)に応じてボタンが含まれます。
私のbase.html
は:
{% if user.is_authenticated %}
Customers
のユーザーとSellers
のユーザーとは異なる行動をとる必要があるため、これは十分ではありません。
だから私が欲しいのは:
{% if user.in_group('Customers') %}
<p>Customer</p>
{% endif %}
{% if user.in_group('Sellers') %}
<p>Seller</p>
{% endif %}
カスタムテンプレートタグが必要です:
from Django import template
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
return user.groups.filter(name=group_name).exists()
テンプレートで:
{% if request.user|has_group:"mygroup" %}
<p>User belongs to my group
{% else %}
<p>User doesn't belong to mygroup</p>
{% endif %}
ソース: http://www.abidibo.net/blog/2014/05/22/check-if-user-belongs-group-Django-templates/
ドキュメント: https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/
アプリでフォルダー「templatetags」を作成します。このフォルダーに2つのファイルを作成します。
__ init __。py
auth_extras.py
from Django import template
from Django.contrib.auth.models import Group
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
group = Group.objects.get(name=group_name)
return True if group in user.groups.all() else False
次のようになります。
app/
__init__.py
models.py
templatetags/
__init__.py
auth_extras.py
views.py
templatetagsモジュールを追加した後、テンプレートでタグまたはフィルターを使用するには、サーバーを再起動する必要があります。
base.html(テンプレート)で次を使用します。
{% load auth_extras %}
ユーザーがグループ「モデレーター」に属しているかどうかを確認するには:
{% if request.user|has_group:"moderator" %}
<p>moderator</p>
{% endif %}
ドキュメント: https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/
最善の方法は次のとおりです。
yourapp/templatetags/templatetagname.py
from Django import template
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
return user.groups.filter(name=group_name).exists()
yourapp/templates/yourapp/yourtemplate.html:
{% load has_group %}
{% if request.user|has_group:"mygroup" %}
<p>User belongs to my group
{% else %}
<p>User doesn't belong to mygroup</p>
{% endif %}
編集:コメントでアドバイスされたように、テンプレートタグをロードする行を追加しました。
グループがDBに存在しない場合は例外が発生することに注意してください。
カスタムテンプレートタグは次のようになります。
from Django import template
from Django.contrib.auth.models import Group
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
try:
group = Group.objects.get(name=group_name)
except Group.DoesNotExist:
return False
return group in user.groups.all()
あなたのテンプレート:
{% if request.user|has_group:"mygroup" %}
<p>User belongs to my group
{% else %}
<p>User doesn't belong to mygroup</p>
{% endif %}
テンプレート内
{% ifequal user.groups.all.0.name "user" %}
This is User
{% endifequal %}