Comment puis-je détecter, à partir de vues ou d'un fichier de modèle, si mon utilisateur administrateur est connecté ou non? Par exemple, cas d'utilisation pour mon site:
/admin/
, entrez les informations d'identification correctes/page/
et il y a des boutons "Ajouter" et "Supprimer"/admin/
et cliquez sur "Déconnexion"/page/
-> il n'y a pas de boutons "Ajouter" et "Supprimer"Django version 1.4
La réponse de Joseph convient parfaitement à votre cas simple, mais en réalité ni is_staff
Ni is_superuser
Ne conviennent parfaitement. En supposant que votre page est, disons, /polls/
(Une liste d'objets Poll
, dans une application appelée poll
), vous devez tester les poll.change_poll
Et poll.delete_poll
autorisations .
Dans un modèle:
{% for poll in polls %}
{% if perms.poll.change_poll %}<a href='/polls/edit/{{ poll.id }}'>Edit</a>{% endif %}
{% if perms.poll.delete_poll %}<a href='/polls/delete/{{ poll.id }}'>Delete</a>{% endif %}
{% endfor %}
Ou dans une vue en utilisant has_perm
:
if not request.user.has_perm('poll.change_poll'):
return HttpResponseForbidden('Nope!')
Ou dans une vue en utilisant un décorateur :
@permission_required('poll.change_poll')
def edit_poll(request, poll_id):
# ....
Vous pouvez attribuer ces autorisations directement à un utilisateur, à un groupe (puis placer un utilisateur dans ce groupe) ou en définissant is_superuser
.
Dans les modèles:
{% if user.is_superuser %}
<p>Hello, admin.</p>
{% else %}
<p>Hello, ordinary visitor.</p>
{% endif %}
En vues:
if request.user.is_superuser:
# Hello, admin.
else:
# Hello, ordinary visitor.
Selon vos besoins, is_staff
pourrait être mieux adapté que is_superuser
. Vous pouvez lire la différence ici .