自定义 django-allauth password_reset_from_key 模板

Customizing django-allauth password_reset_from_key template

我正在使用 django 2.2.3,我正在覆盖 django-allauth 模板,在 password_reset_from_key 模板上我遇到了 NoReverseMatch 异常,

Reverse for 'account_reset_password_from_key' with no arguments not found. 1 pattern(s) tried: ['accounts/password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$']

因此它需要参数,并且该参数可能是重置密码期间生成的密钥。从 URL 模式中,'key' 是变量的名称

我试着用 'key' 传递它。

<form method="POST" action="{% url 'account_reset_password_from_key' key %}">
...
</form>

但是没有用。怎么了?

如果您不覆盖 allauth 视图,则使用 action_url:

<form method="POST" action="{{ action_url }}">

这就是视图传递给模板的内容。

您没有提供该错误的来源,但如果我查找代码中使用了 url 名称的位置,则该名称未在模板中使用。

见: https://github.com/pennersr/django-allauth/search?q=account_reset_password_from_key&unscoped_q=account_reset_password_from_key

我猜你是在调用这个 url name 而不是将参数传递给它?

    url(r"^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$",
        views.password_reset_from_key,
        name="account_reset_password_from_key"),

PS:

作为覆盖 django 应用程序模板时的一般规则,我建议从原始模板开始(例如,将文件 allauth/templates/account/password_reset.html 或任何内容复制到您的 templates 目录(创建所有子目录)) ,然后更改您需要的部分 - 这样,如果出现问题,很容易回滚并找出原因。

根据经验,我知道 allauth 模板相当复杂,如果您不完全了解它们的工作原理,很容易破坏其中的功能。