自定义 django-allauthpassword_reset_from_key 模板

问题描述 投票:0回答:3

我正在使用 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>

但是没有用。怎么了?

python django django-allauth
3个回答
4
投票

如果您不覆盖 allauth 视图,请使用

action_url
:

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

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


0
投票

您没有提供该错误的来源,但如果我查找代码中使用该 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 模板相当复杂,如果您不完全理解它们的工作原理,很容易破坏其中的功能。


0
投票

对于遇到覆盖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 %}

© www.soinside.com 2019 - 2024. All rights reserved.