103👍
If you take a look at the sources for django.contrib.auth.views.password_reset you’ll see that it uses RequestContext
. The upshot is, you can use Context Processors to modify the context which may allow you to inject the information that you need.
The b-list has a good introduction to context processors.
Edit (I seem to have been confused about what the actual question was):
You’ll notice that password_reset
takes a named parameter called 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):
Check password_reset for more information.
… thus, with a urls.py like:
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
will be called for URLs matching '/accounts/password/reset'
with the keyword argument template_name = 'my_templates/password_reset.html'
.
Otherwise, you don’t need to provide any context as the password_reset
view takes care of itself. If you want to see what context you have available, you can trigger a TemplateSyntax
error and look through the stack trace find the frame with a local variable named context
. If you want to modify the context then what I said above about context processors is probably the way to go.
In summary: what do you need to do to use your own template? Provide a template_name
keyword argument to the view when it is called. You can supply keyword arguments to views by including a dictionary as the third member of a URL pattern tuple.
27👍
Strongly recommend this article.
I just plugged it in and it worked
http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html
- [Django]-Dynamic choices field in Django Models
- [Django]-Django: How to get related objects of a queryset?
- [Django]-Is there a way to loop over two lists simultaneously in django?
10👍
You just need to wrap the existing functions and pass in the template you want. For example:
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)
To see this just have a look at the function declartion of the built in views:
http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74
- [Django]-Django: show the count of related objects in admin list_display
- [Django]-Celery missed heartbeat (on_node_lost)
- [Django]-How do I use an UpdateView to update a Django Model?
8👍
You can do the following:
- add to your urlpatterns (r’^/accounts/password/reset/$’, password_reset)
- put your template in ‘/templates/registration/password_reset_form.html’
- make your app come before ‘django.contrib.auth’ in INSTALLED_APPS
Explanation:
When the templates are loaded, they are searched in your INSTALLED_APPS variable in settings.py .
The order is dictated by the definition’s rank in INSTALLED_APPS, so since your app come before ‘django.contrib.auth’ your template were loaded (reference: https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.loaders.app_directories.Loader).
Motivation of approach:
- I want be more dry and don’t repeat for any view(defined by django) the template name (they are already defined in django)
- I want a smallest url.py
- [Django]-How to 'bulk update' with Django?
- [Django]-Loading initial data with Django 1.7+ and data migrations
- [Django]-How can I activate the unaccent extension on an already existing model
2👍
Another, perhaps simpler, solution is to add your override template directory to the DIRS entry of the TEMPLATES setting in settings.py. (I think this setting is new in Django 1.8. It may have been called TEMPLATE_DIRS in previous Django versions.)
Like so:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# allow overriding templates from other installed apps
'DIRS': ['my_app/templates'],
'APP_DIRS': True,
}]
Then put your override template files under my_app/templates
. So the overridden password reset template would be my_app/templates/registration/password_reset_form.html
- [Django]-How to rename items in values() in Django?
- [Django]-How to expire session due to inactivity in Django?
- [Django]-How to recursively query in django efficiently?
1👍
The documentation says that there only one context variable, form
.
If you’re having trouble with login (which is common), the documentation says there are three context variables:
form
: A Form object representing the login form. See the forms documentation for more on Form objects.next
: The URL to redirect to after successful login. This may contain a query string, too.site_name
: The name of the current Site, according to the SITE_ID setting.
- [Django]-Mac OS X – EnvironmentError: mysql_config not found
- [Django]-AbstractUser vs AbstractBaseUser in Django?
- [Django]-Troubleshooting Site Slowness on a Nginx + Gunicorn + Django Stack
1👍
I was using this two lines in the url and the template from the admin what i was changing to my need
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")
- [Django]-Determine variable type within django template
- [Django]-Add rich text format functionality to django TextField
- [Django]-What's the difference between ContentType and MimeType?