【问题标题】:Change URL Of Overridden Templates更改覆盖模板的 URL
【发布时间】:2020-11-16 10:25:27
【问题描述】:

在我的网站users 上,通过以下地址访问他们的帐户:

http://127.0.0.1:8000/users_area/username/profile

他们会在那里找到一个“更改密码”按钮(一个被覆盖的 django 模板),它将带他们到:

http://127.0.0.1:8000/accounts/password/change/

它非常小,我可能太挑剔了,但是否可以保留这个被覆盖的模板但更改它的 url?我希望 change password 网址类似于:

http://127.0.0.1:8000/users_area/username/password/change/

我尝试在用户的应用程序中创建一个模板,将“更改密码”模板内容复制到其中,然后链接到它而不是覆盖的“更改密码”模板,但是(显然,事后看来)它没有不行。


我将作为旁注添加。我实际上有两种用户类型,userspowerusers。每个都有一个独特且完全不同的“users_area”:

http://127.0.0.1:8000/users_area/username/profile

http://127.0.0.1:8000/powerusers_area/username/profile

如果我得到上述问题的答案,我实际上希望将其应用于我的两种不同的用户类型(应该不难,但我认为我应该提及它)。

谢谢。

【问题讨论】:

    标签: django django-templates django-urls


    【解决方案1】:

    你可以这样做 urls.py

    from django.contrib.auth import views as auth_views
    urlpatterns = i18n_patterns(
        # other URLS
        path('/users_area/username/password/change/', auth_views.PasswordChangeView.as_view, name='change_password'),
        # more URLS from auth?
    )
    

    【讨论】:

    • 谢谢,太好了。唯一的问题是在这个页面上提交表单会刷新页面到http://127.0.0.1:8000/accounts/password/change/,我想我需要覆盖view.py并在表单提交后重定向到/users_area/username/password/change/。听起来对吗?
    • 如果您在自定义方面走那么远,我认为最好编写我们自己的密码更改视图和模板。
    【解决方案2】:

    如果你想自定义它们,即使有一个自定义的 MyUser 模型,你仍然可以像这样重用 Django 中的很多东西

        # authentication
        path('user_register', user_register_view, name='user_register'),
        path('login', login_view, name='login'),
        path('logout', logout_view, name='logout'),
        path('change_password', change_password_view, name='change_password'),
        path('reset_password/',
             auth_views.PasswordResetView.as_view(template_name="MyUser/password_reset.html"),
             name="reset_password"),
        path('reset_password_sent/',
             auth_views.PasswordResetDoneView.as_view(template_name="MyUser/password_reset_sent.html"),
             name="password_reset_done"),
        path('reset/<uidb64>/<token>/',
             auth_views.PasswordResetConfirmView.as_view(template_name="MyUser/password_reset_form.html"),
             name="password_reset_confirm"),
        path('reset_password_complete/',
             auth_views.PasswordResetCompleteView.as_view(template_name="MyUser/password_reset_done.html"),
             name="password_reset_complete"),
        path('profile/<username>', profile_view, name='profile'),
    

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2013-08-13
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多