【问题标题】:Template does not exist for django authentication viewsdjango 身份验证视图的模板不存在
【发布时间】:2021-10-23 00:35:02
【问题描述】:

这里是 Django 新手。我只是想使用 Django 身份验证系统制作密码更改表单。我将自己的视图用于登录和注销功能。我读了docs 对于提到的密码更改表单,我在模板目录中创建了一个注册文件夹并创建了一个名为 password_change_form.html 的模板 html 文件,但是当我转到 url http://127.0.0.1:8000/accounts/password_change 时,我不断收到错误 TemplateDoesNotExist at /accounts/login/ 。这是我的应用程序结构:

还有我的 urls.py 文件:

from django.contrib import auth
from django.urls import path,include
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    path('',views.home_page,name='home_page'),
    path('register',views.registration_view,name='registration_view'),
    path('login',views.login_view,name='login_view'),
    path('logout',views.logout_view,name='logout_view'),
    path('accounts/password_change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
]


这是什么以及为什么会发生这种情况?请帮忙。我会很感激的。

【问题讨论】:

    标签: python django django-views django-templates


    【解决方案1】:

    建议您查看您的 django.contrib.auth 文件以便更轻松地查找。 Django 重置密码的默认模板是templates/registration/password_reset_form.html。因此,您的文件名应该是password_reset_form.html。正如我所提到的,为了更容易理解这一点,您可以查看 django.contrib.auth 文件。

    这个 urls.py 文件是主要的 django 管理系统:

    from django.contrib.auth import views
    from django.urls import path
    
    urlpatterns = [
        path('login/', views.LoginView.as_view(), name='login'),
        path('logout/', views.LogoutView.as_view(), name='logout'),
    
        path('password_change/', views.PasswordChangeView.as_view(), name='password_change'),
        path('password_change/done/', views.PasswordChangeDoneView.as_view(), name='password_change_done'),
    
        path('password_reset/', views.PasswordResetView.as_view(), name='password_reset'),
        path('password_reset/done/', views.PasswordResetDoneView.as_view(), name='password_reset_done'),
        path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
        path('reset/done/', views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    ]
    

    由于 Django 注册系统的视图是用 Class Based 格式编写的,所以需要将它们放在 .as_view() 格式中。 您可以从这里复制所有与密码重置相关的 url 并将其放入您的 urls.py 并继续个性化。

    【讨论】:

    • 我已经为新的 urls.py 文件编辑了我的问题,现在当我转到同一个链接时,我收到错误 Page not found(404) 另外,重置 password_reset_form.html 的默认模板如何?文档说是password_change_form.html
    • 在发表上述评论之前,我应该问在哪里可以找到 django.contrib.auth 文件?
    • @nmnsharma007 - 顾名思义,这两个模板一般是分开使用的! password_reset_form 是用户请求重置密码的页面,password_change_form 是用户输入新密码的页面。您也可以在PythonFolder/Lib/site-packages/django/contrib/auth 访问 django.contrib.auth,或者如果您使用的是 virtualenv,请输入 virtualenv 文件夹而不是 PythonFolder 并继续使用相同的路径。
    • 谢谢。我找到了文件并了解了更改和重置之间的区别:) 现在,我面临的问题是,当我转到密码重置链接时,打开的模板是 django admin 而不是我制作的模板。我还能做错什么?我已将 html 文件名更改为 password_reset_form.html
    • 啊,没关系。我在这里得到了修复。 stackoverflow.com/questions/59039168/…感谢您的帮助:D
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多