如何覆盖password_reset HTML模板

时间:2018-07-09 08:13:22

标签: html django templates

我要做的是覆盖django用于password_reset,password_reset_done,password_reset_confirm和password_reset_complete的默认HTML模板。当我将自定义模板添加到第一个URL(password_reset)时,它实际上运行良好。我可以键入与用户关联的电子邮件,然后继续进行重置过程,但是当我尝试为password_reset_done视图添加自定义模板时,password_reset视图不再起作用,并且出现以下错误:

AndroidDriver

这是我的urls.py:

    // Get location of element you want to swipe
    WebElement banner = driver.findElement(<your_locator>);
    Point bannerPoint = banner.getLocation();
    // Get size of device screen
    Dimension screenSize = driver.manage().window().getSize();
    // Get start and end coordinates for horizontal swipe
    int startX = Math.toIntExact(Math.round(screenSize.getWidth() * 0.8));
    int endX = 0;

    TouchAction action = new TouchAction(driver);
    action
            .press(PointOption.point(startX, bannerPoint.getY()))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(500)))
            .moveTo(PointOption.point(endX, bannerPoint.getY()))
            .release();
    driver.performTouchAction(action);

注意:如果我将password_reset_done和所有其他参数替换为它们的正确名称='password_reset_done,name ='password_reset_confirm',name ='password_reset_complete'参数,则所有功能正常,但是我将使用默认模板。 / p>

以下是运行时的urls.py:

Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name. 

只有第一个模板可以更改而不会引起任何错误。我对django还是比较陌生,在文档中没有找到任何可以帮助我解决此问题的东西。

我将在下面保留其他可能重要的代码

来自settings.py

from django.conf.urls import url
# imports for views at a gloabl level (aka other django apps)
from . import views
from django.contrib.auth.views import (
    login,
    logout,
    password_reset,
    password_reset_done,
    password_reset_confirm,
    password_reset_complete
)

urlpatterns = [
    url(r'^$', views.home),
    url(r'^login/$', login, {'template_name': 'accounts/login.html'}),
    url(r'^logout/$', logout, {'template_name': 'accounts/logout.html'}),
    url(r'^register/$', views.register, name='register'),
    url(r'^profile/$', views.view_profile, name='view_profile'),
    url(r'^profile/edit$', views.edit_profile, name='edit_profile'),
    url(r'^change-password$', views.change_password, name='change_password'),
    url(r'^reset-password$', password_reset, {'template_name': 'accounts/reset_password.html'}),
    url(r'^reset-password/done/$', password_reset_done, {'template_name': 'accounts/password_reset_done.html'}),
    url(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
    password_reset_confirm, {'template_name': 'accounts/password_reset_confirm.html'}),
    url(r'^reset-password/complete/$', password_reset_complete, {'template_name': 'accounts/password_reset_complete.html'})
]

任何见识都将不胜感激。

2 个答案:

答案 0 :(得分:3)

您需要为这些URL添加名称,就像为自己的URL添加名称一样。例如:

url(r'^reset-password/done/$', password_reset_done, {'template_name': 'accounts/password_reset_done.html'}, name='password_reset_done'),

答案 1 :(得分:0)

批准的答案对我不起作用。这样做了:

views.py:

from django.contrib.auth.views import PasswordResetConfirmView
# ...
class ActivateAccountConfirmView(PasswordResetConfirmView):
    template_name = "./registration/account_activate_confirm.html"

urls.py:

 re_path(
        r'^accounts/activate/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        ActivateAccountConfirmView.as_view(),
        name='account_activate_confirm'),

上下文:我在应用程序中重置了密码以及帐户激活功能。还要注意,这不是原始用户询问的视图,但是相同的方法应该可以使用。