如何从没有模型的模板的视图中呈现表单?

时间:2019-09-16 10:16:17

标签: django django-models django-forms django-templates django-views

我的Django代码有问题。我正在尝试从视图到模板渲染表单,我只是看到提交按钮。我注意到我们可以通过引入{{form}}这样的形式来动态使用表单,但是当我使用它时,我只是在页面上看到“提交”按钮(抱歉,我不知道如何在此处上传本地图像)。我加入了四个文件:views.py,home.html,forms.py和urls.py     预先谢谢你

home.html

<form method="POST" novalidate action="/config">
  {% csrf_token %}
  <fieldset>
    <legend class="border-bottom mb-4">Home</legend>
    {{ form.as_p }} 
  </fieldset>
  <div class="form-group">
    <button class="btn btn-outline-info" type="submit">Sign Up</button>
  </div>
</form>

views.py

def inputHome(request):
    form = InputHomeForm()

    if request.method == 'POST':
        form = InputHomeForm(request.POST)
        if form.is_valid():
            mk = form.cleaned_data['mk']

            return HttpResponseRedirect('blog-config')
        else:
            form = InputHomeForm()

    return render(request, 'blog/home.html', {'form': form})

forms.py

class InputHomeForm(forms.Form):
    mk = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))

urls.py

urlpatterns = [
    path('home/', blog_views.home, name='blog-home'),
]

我没有错误消息,所以我不知道问题所在。

2 个答案:

答案 0 :(得分:1)

您缺少html中的表单标签。 HTML应该是

<form method='post'>
{% csrf_token %}
  <fieldset>
    <legend class="border-bottom mb-4">Home</legend>
    {{ form.as_p }} 
  </fieldset>
  <div class="form-group">
    <button class="btn btn-outline-info" type="submit">Sign Up</button>
  </div>
</form>

答案 1 :(得分:0)

略有关联(请参阅Nishant对主要问题的回答),但在这里:

if request.method == 'POST':
    form = InputHomeForm(request.POST)
    if form.is_valid():
        mk = form.cleaned_data['mk']

        return HttpResponseRedirect('blog-config')
    else:
        form = InputHomeForm()

在else子句中,将绑定的无效表单(带有验证错误)替换为未绑定的表单,因此永远不会收到错误消息。只需删除整个else子句即可。