【问题标题】:error messages are not shown in django form. and how to solve this value error?错误消息未以 django 形式显示。以及如何解决这个值错误?
【发布时间】:2020-12-12 21:02:09
【问题描述】:

错误消息在 Django 模板中不起作用。

在 html 模板中添加错误代码后,当字段为空并按下提交按钮时,webapp 中不会显示错误消息。 html5 错误是模板中的“novalidate”。

/signup/ 处的值错误 视图 blog.views.user_signup 没有返回 HttpResponse 对象。它返回 None 。

forms.py

from django import forms 
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField
from django.contrib.auth.models import User
from django.utils.translation import gettext,gettext_lazy as _

class SignUpForm(UserCreationForm):
    
    password1 = forms.CharField(label='Password',widget=forms.PasswordInput(attrs={'class':'form-control'}))
    password2 = forms.CharField(label='Confirm Password(again)',widget=forms.PasswordInput(attrs={'class':'form-control'}))
    
    class Meta:
        
        model = User
        
        fields = ['username','first_name','last_name','email']
        
        labels = {'username':'Username','first_name':'First Name','last_name':'Last Name','email':'Email'}
        
        widgets = {'username':forms.TextInput(attrs={'class':'form-control'}),
                   'first_name':forms.TextInput(attrs={'class':'form-control'}),
                   'last_name':forms.TextInput(attrs={'class':'form-control'}),
                   'email':forms.EmailInput(attrs={'class':'form-control'}),}
        
class LoginForm(AuthenticationForm):
    
    username = UsernameField(widget=forms.TextInput(attrs={'autofocus':True, 'class':'form-control'}))
    
    password = forms.CharField(label=_('password'),strip=False, widget=forms.PasswordInput(attrs={'autocomplete':'current-password','class':'form-control'}))

signup.html

{% extends 'blog/base.html' %}
{% load static %}

{% block content %}

<div class="col-sm-10">
    <h3 class="text-white my-5">Signup Page</h3>
    <form action="" class="post" novalidate>
        {% csrf_token %}
        
        {% for fm in form %}
        <div class="form-group">
        {{fm.label_tag}} {{fm}} {{fm.errors | striptags}}
        </div>
        {% endfor %}
        
        <input type="submit" value='Submit' class='btn btn-primary'>
        
        {% if form.non_field_errors %}
            {% for error in form.non_field_errors %}
            <p> {{error}} </p>
            {% endfor %}
        {% endif %}
    
    </form>
</div>

{% endblock content %}

views.py

from django.shortcuts import render,HttpResponseRedirect
from django.contrib import messages
# Create your views here.

# home
def home(request):
    return render(request, 'blog/home.html')

# about
def about(request):
    return render(request, 'blog/about.html')

# contact
def contact(request):
    return render(request, 'blog/contact.html')

# Dashboard
def dashboard(request):
    return render(request, 'blog/dashboard.html')

# Logout
def user_logout(request):
    return HttpResponseRedirect('/')

# Signup
def user_signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            messages.success(request, 'Congratulations You have become an Author.')
            form.save()
        else:
            form = SignUpForm()
        return render(request, 'blog/signup.html',{'form':form})

# Login
def user_login(request):
    form = LoginForm()
return render(request, 'blog/login.html', {'form':form})

【问题讨论】:

  • 你能把你的view.py文件的代码放上来吗?
  • 我添加了views.py,但现在又出现了一个新错误

标签: django django-forms django-templates


【解决方案1】:

您需要处理 GET 和 POST 请求:

def user_signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            messages.success(request, 'Congratulations You have become an Author.')
            form.save()
    else:
        form = SignUpForm()
    return render(request, 'blog/signup.html',{'form':form})

请确保在您的 html 中使用 POST 方法:


<form action="" method="POST" class="post" novalidate>
...
</form>

【讨论】:

  • 如何处理 GET 和 POST ?我的代码是正确的吗?为什么显示此错误以及为什么错误消息不起作用?
  • 在 HTML 中,您可能还需要在 &lt;form&gt; 标记中包含 method="POST"
猜你喜欢
  • 2021-12-03
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2013-09-27
相关资源
最近更新 更多