我正在将我的一个项目升级到Django 1.8.3,并且少数几个挑战之一就是我的自定义注册模板不再被Django访问。
基于此:https://stackoverflow.com/a/19226149/3390630我的appname/templates/registration
文件夹中包含自定义注册文件。
由于Django对模板的访问方式进行了一些重大更改,Django 1.8不再需要我的自定义注册文件了,我收到了这个错误:
NoReverseMatch at /resetpassword/
Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
我尝试将以下加载器添加到TEMPLATES
设置但没有运气。
'loaders': [
'django.template.loaders.app_directories.Loader',
'django.template.loaders.filesystem.Loader',
]
我也在为urls
等使用自定义login, logout, password reset
。
我的网址
...
url(r'^resetpassword/$', 'django.contrib.auth.views.password_reset', name='password_reset'),
url(r'^resetpassword/passwordsent/$', 'django.contrib.auth.views.password_reset_done', name='password_reset_done'),
url(r'^reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', name='password_reset_confirm'),
url(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete', name='password_reset_complete'),
...
有关如何让Django再次查看我的自定义文件夹的任何建议吗?
答案 0 :(得分:2)
我也在努力解决这个问题。 解决方案建议:更改“APP_DIRS”:错误,不好,因为它将停止加载虚拟环境中的任何应用程序模板。
解决方案是将注册模板保存在项目根目录下的模板文件夹中;不在任何应用程序内:appname / templates /.
为此你必须添加:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
在设置文件中的模板定义中。
您可能会遇到的第二个问题仍然是在执行此操作后,对于忘记密码模板,它将加载Django管理模板,为此:在设置文件的INSTALLED_APPS中将'registration'放在'django.contrib.admin'之前。
INSTALLED_APPS = (
'registration',
'django.contrib.admin',
答案 1 :(得分:1)
在Django中,reverse()方法用于反转名称,一个读取友好名称,以匹配URL模式。在这里,您的正则表达式&#39; ^ resetpassword / $&#39;没有名字可以撤销。将参数name='password_reset_done'
添加到您的网址。像,
url(r'^resetpassword/$', 'django.contrib.auth.views.password_reset', {'post_reset_redirect': reverse_lazy('auth_password_reset_done'),
name='password_reset_done'), #Where 'auth_password_reset_done' is where you want to redirect post form submission on the reset page.
此外,您需要重新格式化您的网址配置,因为它缺少一些基本参数,就像这样,
url(r'^password/reset/$',
auth_views.password_reset,
{'post_reset_redirect': reverse_lazy('auth_password_reset_done'),
'template_name': 'registration/password_reset.html'},
name='auth_password_reset'),
url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
auth_views.password_reset_confirm,
{'post_reset_redirect': reverse_lazy('auth_password_reset_complete'),
'template_name' : 'registration/reset_confirm.html'},
name='auth_password_reset_confirm'),
url(r'^password/reset/complete/$',
auth_views.password_reset_complete,
{'post_reset_redirect': reverse_lazy('auth_password_reset_complete'),
'template_name' : 'reset_complete'},
name='auth_password_reset_complete'),
url(r'^password/reset/done/$',
auth_views.password_reset_done,
{'template_name': 'registration/reset_done.html'},
name='auth_password_reset_done'),
答案 2 :(得分:0)
这是我为了获取自定义Registration
文件夹而必须做的事情。
URLs
从app/urls.py
移至project/urls.py
TEMPLATES
中的settings.py
更改为'APP_DIRS': False,
希望这可能对其他人有所帮助,并感谢@ Sentient07指出我正确的方向!