Django-收到错误时表单未以HTML显示

在我的Django项目中,当用户发送GET请求时,我会显示一个表单。

这是此代码:

form = SignUpForm()
if request.method == 'POST':
     ....
else:
   return render(request,'users/signup.html',{'form': form})

为此的HTML

 <form method="POST" class="signupform">
                {% csrf_token %}
                {% for field in form %}
                    <div class="fields">{{ field }}</div>
                    {{ field.errors }}
                    <br>
                {% endfor %}    
                <input class="submitButton" type="submit" value="Sign Up">
 </form>

如果用户发送了发布请求,则我设置form = SignUpForm(request.POST)并检查是否存在与其他用户名相同的用户。发生这种情况时,我想再次渲染整个页面,包括表单字段,并显示错误消息。

这是我当前的代码:

                    try:
                        user = User.objects.get(username=form.cleaned_data['username'])
                        return render(request,{'error': 'username field has already been taken','form':form})
                    except User.DoesnotExist:
                        ...

HTML:

{% if error %}
            <form method="POST" class="signupform">
                    {% csrf_token %}
                    {% for field in form %}
                        <div class="fields">{{ field }}</div>
                        {{ field.errors }}
                        <br>
                    {% endfor %}    
                    <input class="submitButton" type="submit" value="Sign Up">
                </form>
                {{ error }}
{% endif %}

但是,当发生此错误时,会显示错误消息,但是屏幕上没有显示任何表单字段。他们消失了。有人知道这个问题吗?谢谢。

更新的代码:

context = []
if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            if not form.cleaned_data['password'] == form.cleaned_data['confirmPassword']:
                context["error"] = 'username field has already been taken' 
        else:
            raise Http404
else:
    form = SignUpForm()
context['form'] = form
return render(request,context)
wwtt_007 回答:Django-收到错误时表单未以HTML显示

View.py:

context = {}
if request.method == 'POST':
    form = SignUpForm(request.POST)
    try:
        user = User.objects.get(username=form.cleaned_data['username'])
        messages.error(request,'Username field has already been taken')
        return redirect('users/signup.html')

    except User.DoesNotExist:
         ...
else:
    form = SignUpForm()

context['form'] = form
return render(request,'users/signup.html',context)

模板:

{% if messages %}
    {% for message in messages %}
        {{ message }}
    {% endfor %}
{% endif %}
本文链接:https://www.f2er.com/3158232.html

大家都在问