【问题标题】:Making Django messages appear in a specific place on the page让 Django 消息出现在页面的特定位置
【发布时间】:2020-08-31 13:52:36
【问题描述】:

我有一个注册表单,我希望我的错误出现在我的提交按钮下。我怎么能做到这一点? +我想在我的消息中添加自定义类。

我的表单.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit, Row, Column



class UserRegisterForm(UserCreationForm):
email = forms.EmailField()

class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']
#override
def __init__(self, *args, **kwargs):
    super(UserRegisterForm, self).__init__(*args, **kwargs)

    #Custom classok
    self.fields['username'].widget.attrs['class'] = 'input'
    self.fields['email'].widget.attrs['class'] = 'input'
    self.fields['password1'].widget.attrs['class'] = 'input'
    self.fields['password2'].widget.attrs['class'] = 'input'

    #Custom label
    self.fields['username'].label = ""
    self.fields['email'].label = ""
    self.fields['password1'].label = ""
    self.fields['password2'].label = ""

    #Custom placeholder
    self.fields['username'].widget.attrs['placeholder'] = 'Username'
    self.fields['email'].widget.attrs['placeholder'] = 'Email address'
    self.fields['password1'].widget.attrs['placeholder'] = 'Password'
    self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password'
    
    
    
    #Help text off
    for fieldname in ['username', 'password1', 'password2']:
        self.fields[fieldname].help_text = None

我的views.py文件:

from django.shortcuts import render
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm

# Create your views here.
def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        form.save()
        messages.success(request, f'Your account has been created! You are now able to log in!')
        return redirect('landing-home')
else:
    form = UserRegisterForm()
    
return render(request, 'users/register.html',{'form':form})

我的 html 代码也在这里:

{%block content%}
<form class="form" method="POST">
    {% csrf_token %} 
    <fieldset class="form-group text-center text-uppercase">
        <h1 class="sign-up__header">Sign up</h1>
        {{form.as_p}}
    </fieldset>
    <div class="form-group">
        <button class="submit" type="submit">Sign up</button>
    </div>
   
    </div>
</form>

</div>




{%endblock content%}

基本上我想要实现的是,我的错误消息出现在我的表单中,它们将被组织在我的提交按钮下。

【问题讨论】:

    标签: python django message


    【解决方案1】:

    也许这样的事情可以解决问题:

    <form class="form" method="POST">
        {% csrf_token %} 
        <fieldset class="form-group text-center text-uppercase">
            <h1 class="sign-up__header">Sign up</h1>
            {% for field in form %}
                <p>
                    {{ field.label_tag }}
                    {{ field }}
                    {{ field.help_text }}
                </p>
            {% endif %}
        </fieldset>
        <div class="form-group">
            <button class="submit" type="submit">Sign up</button>
        </div>
        {% for error in form.errors %}
            <div class="text-danger">{{ error }}</p>
        {% endfor %}
        </div>
    </form>
    

    【讨论】:

    • 好吧,现在它们出现在正确的位置,但它们同时出现在错误的位置
    • 那我不知道怎么帮你,如果你不知道哪里错了
    • 好吧,例如,如果我输入一个已经存在的用户名,那么错误消息将显示在用户名字段下
    • 哦,您的意思是它们同时出现在用户名字段旁边和提交按钮下方?我将编辑我的答案以避免这种情况。
    • 我已经编辑了我的答案,现在表单应该像以前一样显示,但我省略了{{ field.errors }},以免在字段输入旁边显示它。
    猜你喜欢
    • 2018-01-08
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多