首页 > 解决方案 > 如何在没有模型的模板中从视图中渲染表单?

问题描述

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

主页.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>

视图.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})

表格.py

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

网址.py

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

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

标签: djangodjango-modelsdjango-formsdjango-templatesdjango-views

解决方案


您在 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>

推荐阅读