Django 1.8自定义注册模板文件夹不再工作

时间:2015-07-13 00:46:03

标签: python django templates customization django-registration

我正在将我的一个项目升级到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再次查看我的自定义文件夹的任何建议吗?

3 个答案:

答案 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文件夹而必须做的事情。

  1. URLsapp/urls.py移至project/urls.py
  2. TEMPLATES中的settings.py更改为'APP_DIRS': False,
  3. 希望这可能对其他人有所帮助,并感谢@ Sentient07指出我正确的方向!