template examples bootstrap django django-admin

examples - Django: detecta el inicio de sesión del administrador en la vista o en la plantilla



django templates examples (2)

¿Cómo puedo detectar, desde las vistas o el archivo de plantilla, si mi usuario administrador ha iniciado sesión o no? Por ejemplo, caso de uso para mi sitio:

  1. El usuario abre /admin/ , ingresa las credenciales correctas
  2. Luego, el usuario abre alguna página, por ejemplo /page/ y hay botones "Agregar" y "Eliminar"
  3. El usuario abre /admin/ y hace clic en "Cerrar sesión"
  4. /page/ -> no hay botones "Agregar" y "Eliminar"

Django version 1.4


En plantillas:

{% if user.is_superuser %} <p>Hello, admin.</p> {% else %} <p>Hello, ordinary visitor.</p> {% endif %}

En vistas:

if request.user.is_superuser: # Hello, admin. else: # Hello, ordinary visitor.

Dependiendo de sus necesidades, is_staff podría ser un mejor ajuste que is_superuser . Puedes leer acerca de la diferencia here .


La respuesta de Joseph está bien para su caso simple, pero en realidad ni is_staff ni is_superuser encajan perfectamente. Suponiendo que su página es, digamos, /polls/ (una lista de objetos Poll , en una aplicación llamada poll ), debe probar los poll.change_poll específicos de poll.change_poll y poll.delete_poll .

En una plantilla:

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

O en una vista usando has_perm :

if not request.user.has_perm(''poll.change_poll''): return HttpResponseForbidden(''Nope!'')

O en una vista usando un decorador :

@permission_required(''poll.change_poll'') def edit_poll(request, poll_id): # ....

Puede asignar estos permisos directamente a un usuario, a un grupo (y luego colocar a un usuario en ese grupo) o configurando is_superuser .