错误消息未以Django形式显示。以及如何解决该值错误?

时间:2020-08-24 08:30:45

标签: django django-forms django-templates

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

在html模板中添加错误代码后,如果字段为空并按“提交”按钮,则webapp中不会显示任何错误消息。 html5错误在模板中为“ novalidate”。

/ signup /中的

ValueError 视图blog.views.user_signup没有返回HttpResponse对象。而是返回None。

forms.py

Bad state: Unexpected diagnostics:
/home/(dirname)/flutter/bin/cache/dart-sdk/lib/core/uri.dart:3259:39 - Expected an identifier.

signup.html

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'}))

views.py

{% 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 %}

1 个答案:

答案 0 :(得分:0)

您需要处理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>