template safe plantillas linebreaksbr length ifequal python django passwords

python - safe - linebreaksbr django



¿Cómo uso el restablecimiento de contraseña integrado/cambio de vistas con mis propias plantillas? (7)

Por ejemplo, puedo señalar la url ''^/accounts/password/reset/$'' a django.contrib.auth.views.password_reset con el nombre de archivo de mi plantilla en el contexto, pero creo que necesito enviar más detalles del contexto.

Necesito saber exactamente qué contexto agregar para cada uno de los restablecimientos de contraseña y cambio de vistas.


Estaba usando estas dos líneas en la url y la plantilla del administrador, lo que estaba cambiando a mi necesidad

url(r''^change-password/$'', ''django.contrib.auth.views.password_change'', { ''template_name'': ''password_change_form.html''}, name="password-change"), url(r''^change-password-done/$'', ''django.contrib.auth.views.password_change_done'', { ''template_name'': ''password_change_done.html'' }, name="password-change-done")


La documentation dice que solo hay una variable de contexto, form .

Si tiene problemas con el inicio de sesión (que es común), la documentation dice que hay tres variables de contexto:

  • form : un objeto de formulario que representa el formulario de inicio de sesión. Consulte la documentación de formularios para obtener más información sobre los objetos de Formulario.
  • next : la URL a la que redirigir después del inicio de sesión exitoso. Esto también puede contener una cadena de consulta.
  • site_name : el nombre del sitio actual, de acuerdo con la configuración de SITE_ID.

Otra solución, quizás más simple, es agregar su directorio de plantilla de anulación a la entrada DIRS de la configuración de PLANTILLAS en settings.py. (Creo que esta configuración es nueva en Django 1.8. Puede haber sido llamada TEMPLATE_DIRS en versiones anteriores de Django).

Al igual que:

TEMPLATES = [ { ''BACKEND'': ''django.template.backends.django.DjangoTemplates'', # allow overriding templates from other installed apps ''DIRS'': [''my_app/templates''], ''APP_DIRS'': True, }]

A continuación, coloque los archivos de plantilla de reemplazo en my_app/templates . Entonces, la plantilla de restablecimiento de contraseña anulada sería my_app/templates/registration/password_reset_form.html


Puedes hacer lo siguiente:

  1. agregar a sus patrones url (r ''^ / accounts / password / reset / $'', password_reset)
  2. ponga su plantilla en ''/templates/registration/password_reset_form.html''
  3. hacer que su aplicación venga antes de ''django.contrib.auth'' en INSTALLED_APPS

Explicación:

Cuando se cargan las plantillas, se buscan en la variable INSTALLED_APPS en settings.py. El orden está determinado por el rango de la definición en INSTALLED_APPS, por lo que, dado que su aplicación viene antes de ''django.contrib.auth'', se cargó su plantilla (referencia: https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.loaders.app_directories.Loader ).

Motivación del enfoque:

  1. Quiero ser más seco y no repetir para ninguna vista (definida por django) el nombre de la plantilla (ya están definidos en django)
  2. Quiero un url.py más pequeño


Si echa un vistazo a las fuentes de django.contrib.auth.views.password_reset , verá que usa RequestContext . El resultado es que puede usar Context Processors para modificar el contexto que le permite inyectar la información que necesita.

La lista b tiene una buena introducción a los procesadores de contexto .

Editar (Parece que me confundí acerca de cuál era la pregunta real):

Notarás que password_reset toma un parámetro llamado llamado template_name :

def password_reset(request, is_admin_site=False, template_name=''registration/password_reset_form.html'', email_template_name=''registration/password_reset_email.html'', password_reset_form=PasswordResetForm, token_generator=default_token_generator, post_reset_redirect=None):

Verifique password_reset para más información.

... así, con un urls.py como:

from django.conf.urls.defaults import * from django.contrib.auth.views import password_reset urlpatterns = patterns('''', (r''^/accounts/password/reset/$'', password_reset, {''template_name'': ''my_templates/password_reset.html''}), ... )

django.contrib.auth.views.password_reset a django.contrib.auth.views.password_reset para las URL que coincidan con ''/accounts/password/reset'' con la palabra clave argumento template_name = ''my_templates/password_reset.html'' .

De lo contrario, no es necesario que proporcione ningún contexto ya que la vista password_reset se ocupa de sí misma. Si desea ver qué contexto tiene disponible, puede desencadenar un error de TemplateSyntax y examinar el seguimiento de la pila para encontrar el marco con una variable local llamada context . Si desea modificar el contexto, entonces lo que dije antes sobre los procesadores de contexto es probablemente el camino a seguir.

En resumen: ¿qué necesitas hacer para usar tu propia plantilla? Proporcione un argumento de palabra clave template_name a la vista cuando se invoca. Puede proporcionar argumentos de palabras clave a las vistas al incluir un diccionario como el tercer miembro de una tupla de patrón de URL.


Solo necesita ajustar las funciones existentes y pasar la plantilla que desea. Por ejemplo:

from django.contrib.auth.views import password_reset def my_password_reset(request, template_name=''path/to/my/template''): return password_reset(request, template_name)

Para ver esto solo eche un vistazo a la declaración de función de las vistas integradas:

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74