urls template safe linebreaksbr ifequal examples bootstrap python django authentication session cookies

python - template - Incluir siempre al usuario en el contexto de la plantilla django



linebreaksbr django (7)

@Dave Para usar {{user.username}} en mis plantillas, tendré que usar requestcontext en lugar de solo un mapa / hash normal: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-requestcontext

Así que supongo que no hay variables globales que verifique el motor de plantillas.

Pero el RequestContext tiene algunas clases rellenas que puedo examinar para resolver mis problemas. Gracias.

Estoy trabajando en un pequeño sitio de intranet para una empresa pequeña, donde el usuario debería poder publicar. He imaginado un mecanismo de autenticación muy simple en el que las personas simplemente ingresan su dirección de correo electrónico y se les envía una url de inicio de sesión única que establece una cookie que siempre los identificará para futuras solicitudes.

En la configuración de mi plantilla, tengo base.html, y las otras páginas extienden esto. Deseo mostrar el botón de inicio de sesión o el botón de registro en el archivo base.html, pero ¿cómo puedo asegurarme de que las variables necesarias sean siempre parte del contexto? Parece que cada vista simplemente configura el contexto a su gusto, y no existe una población de contexto global. ¿Hay alguna forma de hacerlo sin incluir al usuario en cada creación de contexto?

¿O tendré que hacer mis propios atajos personalizados para configurar el contexto correctamente?


@Ryan: la documentación sobre los preprocesadores es un poco pequeña

@Staale: Agregar usuario al Contexto cada vez que se está llamando a la plantilla a la vista, DRY

La solución es usar un preprocesador

A : en tu configuración agrega

TEMPLATE_CONTEXT_PROCESSORS = ( ''myapp.processor_file_name.user'', )

B : en myapp / nombre_archivo_procesador.py inserte

def user(request): if hasattr(request, ''user''): return {''user'':request.user } return {}

A partir de ahora puede usar funcionalidades de objetos de usuario en sus plantillas.

{{ user.get_full_name }}


En un sentido más general de no tener que establecer explícitamente variables en cada vista, parece que desea ver cómo se escribe su propio procesador de contexto .

De los documentos:

Un procesador de contexto tiene una interfaz muy simple: es solo una función de Python que toma un argumento, un objeto HttpRequest y devuelve un diccionario que se agrega al contexto de la plantilla. Cada procesador de contexto debe devolver un diccionario.


Los consejos están en cada respuesta, pero una vez más, desde "cero", para los novatos:

los datos de autenticación están en plantillas (casi) por defecto, con un pequeño truco:

en views.py :

from django.template import RequestContext ... def index(request): return render_to_response(''index.html'', {''var'': ''value''}, context_instance=RequestContext(request))

en index.html :

... Hi, {{ user.username }} var: {{ value }} ...

Desde aquí: https://docs.djangoproject.com/en/1.4/topics/auth/#authentication-data-in-templates

Esta variable de contexto de plantilla no está disponible si RequestContext no se está utilizando.


Si puede conectar su autenticación al esquema de autenticación de Django , podrá usar request.user .

Creo que esto debería ser solo un caso de llamar a authenticate() y login() función del contenido de su cookie.

Edit: @Staale - Siempre uso el truco de locals() para mi contexto para que todas mis plantillas puedan ver la request y así request.user . Si no lo eres, supongo que no sería tan sencillo.


es posible por defecto, siguiendo los siguientes pasos, asegúrese de haber agregado el contexto ''django.contrib.auth.context_processors.auth'' en su configuración. Por defecto, se agrega en settings.py, por lo que se ve así

TEMPLATE_CONTEXT_PROCESSORS = ( ''django.core.context_processors.request'', ''django.contrib.auth.context_processors.auth'', ''django.core.context_processors.auth'',)

Y puedes acceder a un objeto de usuario como este,

{% if user.is_authenticated %} <p>Welcome, {{ user.username }}. Thanks for logging in.</p> {% else %} <p>Welcome, new user. Please log in.</p> {% endif %}

Para obtener más información, consulte aquí http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-data-in-templates