2016-05-23 21 views
0

ユーザグループに基づいてナビゲーションページでURLを表示または非表示にしたいと考えています。 現在、私はすべてのビューの先頭に追加して、テンプレートに値を送信してそれをチェックしていますが、ビューが認証を必要とせず、その値が設定されていない場合でも、テンプレート?Django - ユーザグループに応じてベースHTMLのURLを表示/非表示にする?

これを行うには良い方法はありますか? global.pyのようにどこでチェックして設定すれば、どのテンプレートでも使用できますか?まったく違う何か?あなたが機能をcontext_processors.pyを作成し、作成する必要が

{% if Authorised == 'IT' or Authorised =='Netwworks' %} 
<a href="link">Link</a> 
{% endif %} 
+0

これは少し不明です。ユーザーがITかネットワークかをどのように判断していますか?なぜあなたはテンプレートでそれを行うことができませんか? –

+0

global.pyはありませんが、これを行うためのカスタムコンテキストマネージャーを書くことができます。 – Selcuk

+1

TEMPLATE_CONTEXT_PROCESSORSをお探しですか? – Anoop

答えて

1

私はGet user group in a template

に基づいて、Djangoの管理

でのユーザーグループがuser_tags.py/group_tagsを作成しています。 pyを適切な場所に置きます。例えばテンプレートで次にauth_extra/templatetags/user_tags.py

from django import template 

register = template.Library() 

@register.filter('in_group') 
def in_group(user, group_name): 
    return user.groups.filter(name=group_name).exists() 

{% load user_tags %} 

{% if request.user|in_group:"IT"%} 
    <a href="link">IT only link</a> 
{% endif %} 

{% if request.user|in_group:"Netwworks"%} 
    <a href="link"> Netwworks only link</a> 
{% endif %} 
0

view.py

Authorised_user = '' 
if request.user.is_authenticated(): 
    Authorised_user = 'IT' 

@login_required 
def index(request): 

    return render(request, 'service/index.html', { 
     'Authorised': Authorised_user, 
    })  

template.htmlは TEMPLATE_CONTEXT_PROCESSORS =(setttingsで次に

def foo(): 
    Authorised_user = '' 
    if request.user.is_authenticated(): 
    Authorised_user = 'IT' 

を言います"path_to_context_processor.foo") このようにyoすべてのビューで明示的に定義することなく、すべてのテンプレートでfoo変数を使用できます。 あなたもここで見ることができ:https://rubayeet.wordpress.com/2009/10/31/django-how-to-make-a-variable-available-in-all-templates/

関連する問題