我正在使用 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 名称的位置,它不会在模板中使用。
我的猜测是你正在调用这个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 模板相当复杂,如果您不完全理解它们的工作原理,很容易破坏其中的功能。
对于遇到覆盖password_change_from_key.html问题的任何人:
对于本次演示 我在这个 65.0.2 演示中使用 Django 4.2.11 和 django-allauth
所以您需要做的就是加载 allauth 标签
{% load allauth %}
然后在表单操作上 像这样放置变量action_url
<form method="post" action="{{action_url}}">
这是我的完整示例
{% extends "base.html" %}
{% load i18n %}
{% load allauth %}
{% block content %}
<div class="container d-flex justify-content-center align-items-center" style="height: 100vh;">
<div class="col-md-4">
<h3 class="text-center mb-4">{% trans "Enter New Password" %}</h3>
<form method="post" action="{{action_url}}">
{% csrf_token %}
<div class="form-floating mb-3">
<input type="password" class="form-control" name="password1" id="password1" placeholder="{% trans 'New Password' %}" required>
<label for="password1">{% trans "New Password" %}</label>
</div>
<div class="form-floating mb-3">
<input type="password" class="form-control" name="password2" id="password2" placeholder="{% trans 'Confirm Password' %}" required>
<label for="password2">{% trans "Confirm New Password" %}</label>
</div>
<div class="d-grid">
<button type="submit" class="btn btn-primary btn-block">{% trans "Reset Password" %}</button>
</div>
</form>
</div>
</div>
{% endblock %}