【问题标题】:Add styling to django Password reset forms为 django 密码重置表单添加样式
【发布时间】:2021-01-05 16:26:43
【问题描述】:

我想为 django 的默认密码重置表单添加样式,例如类和占位符

我的 urls.py 中有以下内容

from django.urls import path
from . import views
from django.contrib.auth import views as auth_views


urlpatterns = [

    # Password reset paths

    path('password_reset/', auth_views.PasswordResetView.as_view(template_name="main/password_reset.html"),name="reset_password"),
    path('password_reset_sent/', auth_views.PasswordResetDoneView.as_view(template_name="main/password_reset_sent.html"),name="password_reset_done"),
    path('reset_password/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name="main/reset_password.html"),name="password_reset_confirm"),
    path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(template_name="main/reset_password_complete.html"),name="password_reset_complete"),
]

在模板中

<form action="" method="POST">
            {% csrf_token %}
            {{form}}
            <input type="submit" name="Send email" class="btn btn-primary" >
        </form>

【问题讨论】:

    标签: python django django-forms django-views django-templates


    【解决方案1】:

    尝试使用 django-crispy-forms

    安装

    pip install django-crispy-forms
    

    将其添加到您的 INSTALLED_APPS 并选择样式:

    INSTALLED_APPS = [
    'crispy_forms',
    ]
    CRISPY_TEMPLATE_PACK = 'bootstrap4'
    

    加载标签

    {% load crispy_forms_tags %}
    

    现在您可以设置表单样式

    {{ form|crispy }}
        
    

    【讨论】:

    • 我找到了这个解决方案,但我正在检查 django 是否有另一种方法可以在没有第三方的情况下为此目的提供,谢谢您的回答
    • 如果我找不到其他方法,我会使用它
    • 我觉得你需要在模板中加载脆皮标签
    • 我认为@SerioUs 指出的是正确的。您可以通过更新小部件字段来覆盖密码重置表单。
    【解决方案2】:

    尝试使用 django-crispy-forms 和/或 django-widget-tweaks

    【讨论】:

      【解决方案3】:

      使用 Crispy Forms,这里有一篇解释清楚的文章 CrispyForms

      【讨论】:

        【解决方案4】:

        是的,当然你可以覆盖 django 表单。

        # forms.py
        
        from django.contrib.auth.forms import PasswordResetForm
        
        class UserPasswordResetForm(PasswordResetForm):
            def __init__(self, *args, **kwargs):
                super(UserPasswordResetForm, self).__init__(*args, **kwargs)
        
            email = forms.EmailField(label='', widget=forms.EmailInput(attrs={
                'class': 'your class',
                'placeholder': 'your placeholder',
                'type': 'email',
                'name': 'email'
                }))
        
        # urls.py
        
        from .forms import UserPasswordResetForm
        
        path('password_reset/', auth_views.PasswordResetView.as_view(
            template_name='main/password_reset.html',
            form_class=UserPasswordResetForm),name='password_reset'),
        

        【讨论】:

        • 这是我一直在寻找的,我会在尝试时投票,谢谢
        猜你喜欢
        • 2012-07-18
        • 2014-05-31
        • 2014-08-26
        • 2015-12-12
        • 2019-01-08
        • 2013-05-19
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多