【问题标题】:Cannot get is_valid() to go back to template with bound form无法让 is_valid() 返回到带有绑定表单的模板
【发布时间】:2020-09-07 15:58:52
【问题描述】:

Django docs,它说

"我们调用表单的 is_valid() 方法;如果不是 True,我们返回 带有表单的模板。这次表格不再为空 (未绑定),因此 HTML 表单将填充之前的数据 提交,可以根据需要进行编辑和更正。”

我正在尝试使这种行为起作用。

在views.py中:

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)

        if form.is_valid():
            return redirect('auctions/test.html')

    else:
        form = TestForm()
        return render(request, 'auctions/test.html', {'form': form})

在forms.py中:

class TestForm(forms.Form):
    testnumber = forms.DecimalField(max_digits=1)

在 test.html 中:

<form action="{% url 'auctions:test' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>

现在,当我提交带有多于 1 位数字的表单时,is_valid() 的计算结果为 False。发生这种情况时,文档说应该使用绑定表单和错误呈现模板。相反,什么也没发生,我得到ValueError: The view auctions.views.test didn't return an HttpResponse object. It returned None instead.

【问题讨论】:

  • Is return render(request, 'auctions/test.html', {'form': form}) 应该在代码views.py的最后一行中添加标签
  • @AyanSh 不,是的。就是这样。如果您想发布我可以接受的答案。不敢相信我已经为此苦苦挣扎了这么久。
  • 好的,我会发布答案np

标签: django django-forms django-templates


【解决方案1】:

你的错误是你的views.py文件的最后一行被缩进了。

代替:

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)

        if form.is_valid():
            return redirect('auctions/test.html')

    else:
        form = TestForm()
        return render(request, 'auctions/test.html', {'form': form})

应该是:

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)

        if form.is_valid():
            return redirect('auctions/test.html')

    else:
        form = TestForm()
    return render(request, 'auctions/test.html', {'form': form})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2020-08-29
    • 2017-09-28
    相关资源
    最近更新 更多