Django - Отображение различных шаблонов для администраторов - PullRequest
7 голосов
/ 26 февраля 2012

В Django, как лучше всего реализовать шаблоны с дополнительными функциями для пользователей с правами администратора.

Я не уверен, стоит ли мне создавать набор совершенно разных представлений, специфичных для администраторов, или интегрировать их в мои существующие представления и шаблоны, такие как «если пользователь является администратором» везде.

Есть ли стандартный способ сделать это в Django?

Ответы [ 3 ]

7 голосов
/ 22 августа 2013

Это покажет материал, только если вы активны, а персонал не администратор:

{% if request.user.is_active and request.user.is_staff %}
    {% include "foo/bar.html" %}
{% endif %}

Если вы хотите показать только и только для администратора, вы должны сделать это:

{% if request.user.is_superuser %}
    ADD your admin stuff there.
{% endif %}

Различия в этих полях здесь .

2 голосов
/ 26 декабря 2013

Я сторонник сохранения как можно большего количества логики на уровне представления (говоря вообще о шаблоне проектирования MVC).Так почему бы не использовать декораторы, чтобы направлять пользователя к различным представлениям в зависимости от его привилегий?В вашем urls.py определите шаблон для администраторов:

url(r'^admin/$', 'user.views.admin_index'),
#do so for your other admin views, maybe more elegantly than this quick example

Затем определите декоратор, чтобы выгнать пользователя, если он не администратор

def redirect_if_not_admin(fn):
def wrapper(request):
    if request.user.is_staff():
        return fn(request)
    #or user.is_superuser(), etc
    else:
        return HttpResponseRedirect('/Permission_Denied/')
return wrapper

И в вашем администратореviews

@redirect_if_not_admin
def index(request):
##do your thing 

Это больше кода, чем два других ответа, которые не являются неправильными.Это просто личное предпочтение держать помехи в взглядах.

2 голосов
/ 26 февраля 2012

Если у вас есть пользователь, доступный в контексте шаблона, вы можете сделать:

{% if user.is_active and user.is_staff %}
    Only the admin will see this code. For example include some admin template here:
   {% include "foo/bar.html" %}
{% endif %}

Пользователь будет доступен в вашем шаблоне, если вы используете RequestContext, а ваша настройка TEMPLATE_CONTEXT_PROCESSORS содержит django.contrib.auth.context_processors.authкоторый по умолчанию.См. данные аутентификации в шаблонах в качестве ссылки.

...