Par exemple, je peux pointer le url '^/accounts/password/reset/$'
à Django.contrib.auth.views.password_reset
avec le nom de fichier de mon modèle dans le contexte, mais je pense qu’il faut envoyer plus de détails sur le contexte.
J'ai besoin de savoir exactement quel contexte ajouter pour chaque réinitialisation de mot de passe et changer de vue.
Si vous jetez un oeil aux sources de Django.contrib.auth.views.password_reset vous verrez qu'il utilise RequestContext
. Le résultat est que vous pouvez utiliser les processeurs de contexte pour modifier le contexte, ce qui peut vous permettre d’injecter les informations dont vous avez besoin.
La b-liste a un bon introduction aux processeurs de contexte .
Edit (je semble avoir été confus quant à la nature de la question):
Vous remarquerez que password_reset
prend un paramètre nommé appelé 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):
Vérifiez password_reset pour plus d'informations.
... ainsi, avec un urls.py comme:
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
sera appelé pour les URL correspondant à '/accounts/password/reset'
avec le mot clé argument template_name = 'my_templates/password_reset.html'
.
Sinon, vous n'avez pas besoin de fournir de contexte en tant que password_reset
_ view prend soin de lui-même. Si vous voulez voir quel contexte vous avez disponible, vous pouvez déclencher une erreur TemplateSyntax
et regarder à travers la trace de la pile pour trouver le cadre avec une variable locale nommée context
. Si vous voulez modifier le contexte, ce que j'ai dit plus haut à propos des processeurs de contexte est probablement la voie à suivre.
En résumé: que devez-vous faire pour utiliser votre propre modèle? Fournir un template_name
argument de mot clé à la vue lorsqu’elle est appelée. Vous pouvez fournir des arguments de mots clés aux vues en incluant un dictionnaire en tant que troisième membre d'un tuple de modèle d'URL.
Je recommande vivement cet article.
Je viens de le brancher et cela a fonctionné
http://garmoncheg.blogspot.com.au/2012/07/Django-resetting-passwords-with.html
Il vous suffit d’envelopper les fonctions existantes et de transmettre le modèle souhaité. Par exemple:
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)
Pour le voir, jetez un coup d’œil à la déclinaison de fonction des vues intégrées:
http://code.djangoproject.com/browser/Django/trunk/Django/contrib/auth/views.py#L74
Vous pouvez faire ce qui suit:
Explication:
Lorsque les modèles sont chargés, ils sont recherchés dans votre variable INSTALLED_APPS dans settings.py. L'ordre est dicté par le rang de la définition dans INSTALLED_APPS. Ainsi, puisque votre application est antérieure à Django.contrib.auth, votre modèle a été chargé (référence: https://docs.djangoproject.com/en/dev/ref /templates/api/#Django.template.loaders.app_directories.Loader ).
Motivation de l'approche:
Une autre solution, peut-être plus simple, consiste à ajouter votre répertoire de modèles de remplacement à l'entrée DIRS du paramètre TEMPLATES dans settings.py. (Je pense que ce paramètre est nouveau dans Django 1.8. Il a peut-être été appelé TEMPLATE_DIRS dans les versions précédentes Django.)
Ainsi:
TEMPLATES = [
{
'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
# allow overriding templates from other installed apps
'DIRS': ['my_app/templates'],
'APP_DIRS': True,
}]
Ensuite, placez vos fichiers de modèle de remplacement sous my_app/templates
. Ainsi, le modèle de réinitialisation du mot de passe remplacé serait my_app/templates/registration/password_reset_form.html
J'utilisais ces deux lignes dans l'URL et le modèle de l'administrateur ce que je changeais à mon besoin
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")
Le documentation indique qu'il n'y a qu'une seule variable de contexte, form
.
Si vous rencontrez des problèmes de connexion (ce qui est courant), documentation indique qu'il existe trois variables de contexte:
form
: Un objet Form représentant le formulaire de connexion. Voir la documentation des formulaires pour plus d'informations sur les objets de formulaire.next
: l'URL à rediriger après une connexion réussie. Cela peut également contenir une chaîne de requête.site_name
: Nom du site actuel, conformément au paramètre SITE_ID.