【问题标题】:Django built in auth views for password reset - Form not showingDjango内置用于密码重置的身份验证视图 - 表单未显示
【发布时间】:2018-08-04 09:46:56
【问题描述】:

我正在尝试使用 django.contrib.auth 视图来允许网站用户重置他们的密码。但是,用户输入电子邮件地址以重置密码的电子邮件字段未显示。而是显示表单标签:

这就是它的样子 screenshot

以下是我自己实现的,主要只是对urls.py和templates做了一些改动。我该如何解决这个错误?谢谢。

urls.py

from django.urls import path, include, re_path
from django.contrib.auth import views as authViews

urlpatterns = [
re_path(r'^account/password_reset/$', authViews.password_reset, {'template_name' : 'accounts/reset_password.html' }, name='password_reset'),
    re_path(r'^account/password_reset/done/$', authViews.password_reset_done, {'template_name': 'accounts/reset_password_done.html'}, name='password_reset_done'),
    re_path(r'^account/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', authViews.password_reset_confirm, {'template_name': 'accounts/reset_password_confirm.html'}, name='password_reset_confirm'),
    re_path(r'^account/reset/done/$', authViews.password_reset_complete, {'template_name': 'accounts/reset_done.html'}, name='password_reset_complete'),
]

reset_password.html

<p class="text-center">If you have forgotten your password, please type your email address so we can send you a reset link.</p>
    <form method="post">
        {% csrf_token %}
            <p> {‌{ form | crispy }} </p>
            <button type="submit" class="btn btn-secondary mb-3 float-right">Reset Password</button>
    </form>

forms.py 文件在下面,虽然我不认为它是相关的。附加信息,以防万一。

forms.py

from django import forms
from django.forms import ModelForm
from .models import Product, Category
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class SignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=100, required=True)
    last_name = forms.CharField(max_length=100, required=True)
    email = forms.EmailField(max_length=254, help_text='eg. youremail@anyemail.com')

    class Meta:
        model = User
        fields = ('first_name','last_name','username','password1','password2')

class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = ('name','slug','description','category','price','image','stock','available')

【问题讨论】:

    标签: python django passwords change-password


    【解决方案1】:

    您是否加载了清晰的表单标签?在您的reset_password.html 中包含{% load crispy_forms_tags %}

    【讨论】:

    • 我相信这个问题与模板或松脆的表单有关,因为表单标签显示在页面中。要确认这一点,请尝试删除脆标签并查看表单字段是否会显示。仅使用 {{form}}。
    • 我也试过了,但它仍然返回错误。我将代码上传到 github github.com/moonfairyz/sun 希望你能帮助我。谢谢。
    • 您的代码没有错误,模板引擎将 {{form|crispy}} 读取为纯文本,我删除并重新编写了相同的内容,并且成功了。用花括号重新编写 {{form|crispy}} 就可以了,不要复制粘贴。
    • 正如你所说,它工作得很好。真奇怪。有没有办法避免这样的错误而不必重新输入?尤其是当您测试代码并到处修改时,有时很难不进行一些复制和粘贴。谢谢你为我做的一切。你是生命的救星!
    • 其实这是一个奇怪的错误,我相信是花括号引起的。但是,您将来不会收到这样的错误,但作为一种好的做法,请尽量避免复制粘贴。很高兴听到您的问题已得到解决。
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2020-07-21
    • 2019-06-10
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多