Vraag Django: knop Verbergen in sjabloon, als gebruiker geen supergebruiker is


Hoe krijg je je sjabloon / weergave om te herkennen of een ingelogde gebruiker al dan niet een supergebruiker is of niet?

Er zijn bepaalde knoppen op mijn formulieren (in de sjabloon) die ik volledig wil verbergen als de gebruiker geen supergebruiker is

Hoe zou je dat doen?


27
2018-04-08 19:20


oorsprong


antwoorden:


Uitchecken is_superuser op de User voorwerp:

{% if request.user.is_superuser %}
    ...
    <button>...</button>
    ...
{% else %}
...
{% endif %}

BEWERK: na @ mustafa-0x reacties

Het bovenstaande gaat ervan uit dat je hebt django.core.context_processors.request opgenomen in uw TEMPLATE_CONTEXT_PROCESSORS omgeving wat niet de standaard is.

De standaardinstelling voor TEMPLATE_CONTEXT_PROCESSORS:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.tz',
#    'django.core.context_processors.request',
    'django.contrib.messages.context_processors.messages',
)

bevat al de django.contrib.auth.context_processors.auth (en omvat met name niet de request contextprocessor), wat betekent dat u in de meeste gevallen al toegang hebt tot {{ user }} zonder de noodzaak om het toe te voegen aan uw context via de weergave, of schakel het in request contextprocessor voor toegang tot de gebruiker zoals hierboven via {{ request.user }}


65
2018-04-08 19:23



Zoals besproken in de opmerkingen, kunt u de User object dat automatisch in sjablonen beschikbaar is:

{% if user.is_superuser %}
<div class="alert alert-success" role="alert">
You are logged in as {{user.first_name}}, here are the
<a href="/admin/">admin pages</a> for changing content.
</div>
{% endif %}

Je kan ook gebruiken user.is_staff wat misschien meer geschikt is.


3
2018-04-16 07:29