web-dev-qa-db-ja.com

ユーザーがグループに属しているかどうかを(テンプレートで)チェックする方法

ユーザーが特定のグループに属しているかどうかをテンプレートで確認する方法は?

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 %}
30
Milano

カスタムテンプレートタグが必要です:

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/

48
mishbah

アプリでフォルダー「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/

12
fuser60596

最善の方法は次のとおりです。

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 %}

編集:コメントでアドバイスされたように、テンプレートタグをロードする行を追加しました。

8
Alex K.

グループが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 %}
7
muccix

テンプレート内

{% ifequal user.groups.all.0.name "user" %}
  This is User
{% endifequal %}
  
3
Jaroslav Hájek