Zum Beispiel kann ich mit meinem Vorlagendateinamen auf den im Kontext verweisen url '^/accounts/password/reset/$'
, django.contrib.auth.views.password_reset
aber ich denke, ich muss mehr Kontextdetails senden.
Ich muss genau wissen, welchen Kontext ich für jedes Zurücksetzen des Passworts und Ändern der Ansichten hinzufügen muss.
context
es das Richtige ist, wonach Sie suchen!Antworten:
Wenn Sie sich die Quellen für django.contrib.auth.views.password_reset ansehen, werden Sie feststellen , dass es verwendet wird
RequestContext
. Das Ergebnis ist, dass Sie Kontextprozessoren verwenden können, um den Kontext zu ändern, sodass Sie möglicherweise die benötigten Informationen einfügen können.Die B-Liste bietet eine gute Einführung in Kontextprozessoren .
Bearbeiten (Ich bin anscheinend verwirrt darüber, was die eigentliche Frage war):
Sie werden feststellen, dass
password_reset
ein benannter Parameter namenstemplate_name
:Überprüfen Sie password_reset auf weitere Informationen.
... also mit einer urls.py wie:
django.contrib.auth.views.password_reset
wird für URLs aufgerufen, die'/accounts/password/reset'
mit dem Schlüsselwortargument übereinstimmentemplate_name = 'my_templates/password_reset.html'
.Andernfalls müssen Sie keinen Kontext angeben, da sich die
password_reset
Ansicht um sich selbst kümmert. Wenn Sie sehen möchten, welchen Kontext Sie zur Verfügung haben, können Sie einenTemplateSyntax
Fehler auslösen und durch die Stapelverfolgung den Frame mit einer lokalen Variablen namens suchencontext
. Wenn Sie den Kontext ändern möchten, ist das, was ich oben über Kontextprozessoren gesagt habe, wahrscheinlich der richtige Weg.Zusammenfassend: Was müssen Sie tun, um Ihre eigene Vorlage zu verwenden? Geben Sie
template_name
der Ansicht beim Aufruf ein Schlüsselwortargument an. Sie können Ansichten Schlüsselwortargumente bereitstellen, indem Sie ein Wörterbuch als drittes Mitglied eines URL-Mustertupels einfügen.quelle
registration/password_reset_email.html
tatsächlich HTML-Elemente wie: enthält<div>
,<a>
weil dies nur Text sendetIch kann diesen Artikel nur empfehlen.
Ich habe es einfach angeschlossen und es hat funktioniert
http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html
quelle
Sie müssen nur die vorhandenen Funktionen umbrechen und die gewünschte Vorlage übergeben. Beispielsweise:
Um dies zu sehen, werfen Sie einen Blick auf die Funktionsdeklaration der eingebauten Ansichten:
http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74
quelle
Sie können Folgendes tun:
Erläuterung:
Wenn die Vorlagen geladen werden, werden sie in Ihrer Variablen INSTALLED_APPS in settings.py durchsucht. Die Reihenfolge wird durch den Rang der Definition in INSTALLED_APPS bestimmt. Da Ihre App also vor 'django.contrib.auth' steht, wurde Ihre Vorlage geladen (Referenz: https://docs.djangoproject.com/de/dev/ref/templates/api) /#django.template.loaders.app_directories.Loader ).
Motivation des Ansatzes:
quelle
Eine andere, vielleicht einfachere Lösung besteht darin, Ihr Überschreibungsvorlagenverzeichnis zum DIRS-Eintrag der Einstellung TEMPLATES in settings.py hinzuzufügen. (Ich denke, diese Einstellung ist neu in Django 1.8. In früheren Django-Versionen wurde sie möglicherweise TEMPLATE_DIRS genannt.)
Wie so:
Dann legen Sie Ihre Override-Vorlagendateien unter
my_app/templates
. Die überschriebene Vorlage zum Zurücksetzen des Passworts wäre alsomy_app/templates/registration/password_reset_form.html
quelle
Die Dokumentation besagt, dass es nur eine Kontextvariable gibt
form
.Wenn Sie Probleme mit der Anmeldung haben (was häufig vorkommt), gibt es in der Dokumentation drei Kontextvariablen:
form
: Ein Formularobjekt, das das Anmeldeformular darstellt. Weitere Informationen zu Formularobjekten finden Sie in der Formulardokumentation.next
: Die URL, zu der nach erfolgreicher Anmeldung umgeleitet werden soll. Dies kann auch eine Abfragezeichenfolge enthalten.site_name
: Der Name der aktuellen Site gemäß der Einstellung SITE_ID.quelle
password_reset
Ansicht sind.Ich habe diese beiden Zeilen in der URL und der Vorlage des Administrators verwendet, was ich an meine Bedürfnisse angepasst habe
quelle