Django - Показване на различни шаблони на администраторите

В Django кой е най-добрият начин за внедряване на шаблони с допълнителна функционалност за потребители с разрешения „admin“.

Не съм сигурен дали трябва да създам набор от напълно различни изгледи, специфични за администратори, или да го интегрирам в моите съществуващи изгледи и шаблони като „ако потребителят е администратор“ навсякъде.

Има ли стандартен начин да направите това в Django?


person 9-bits    schedule 25.02.2012    source източник


Отговори (3)


Това ще покаже нещата само ако сте активни и персоналът не е администратор:

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

Разлики относно тези полета тук.

person Guillaume    schedule 22.08.2013

Ако имате наличен потребител в контекста на шаблона, можете да направите:

{% 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, което е по подразбиране. Вижте данни за удостоверяване в шаблони като справка.

person Mariusz Jamro    schedule 26.02.2012

Аз съм привърженик на запазването на колкото се може повече логика от слоя с изгледа (говорейки като цяло за MVC Design Pattern). Така че защо да не използвате декоратори, за да насочите вашия потребител към различни изгледи въз основа на техните привилегии? Във вашия 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

И във вашите администраторски изгледи

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

Това е повече код от другите два отговора, които не са грешни. Това е просто лично предпочитание да се запази бъркотията в изгледите.

person AndrewSmiley    schedule 26.12.2013