【问题标题】:How do you render form from views in template without model?如何在没有模型的模板中从视图中渲染表单?
【发布时间】:2020-01-17 03:58:51
【问题描述】:

我的 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'),
]

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

【问题讨论】:

  • 您在页面上实际看到了什么?
  • 您在 html 中缺少
    标签。
  • 我只看到“提交”按钮。
  • @VanessaHONFO “它不工作”是对问题最无用的描述。如果您需要帮助,您必须提供确切相关信息,参见minimal reproducible example
  • 是的,抱歉,我正在发现该平台。但我在第一篇文章中修改了文本。谢谢

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


【解决方案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>

【讨论】:

  • 你好。对不起。我写了表单标签,粘贴时无法将其添加到代码中。但我做到了。所以,这不是那个。
  • @VanessaHONFO 如果您没有提供关于您的问题的确切信息,那么试图帮助您只是浪费大家的时间。您是否至少检查了呈现的 HTML ???
  • 你好。我修改了我的帖子来描述输出(抱歉,我看不到如何上传本地图片来展示给你看)。如何检查呈现的 HTML?
【解决方案2】:

有点不相关(参见 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 子句。

【讨论】:

  • 我删除了它,但没有任何变化。有关信息,在我的页面上,我只看到“提交”按钮。没有字段。
  • @VanessaHONFO 我并没有说它会解决你当前的问题 - 实际上我非常明确地说它不会 - 只是你有(另一个)问题在这里。
  • 好的,我明白了。谢谢
猜你喜欢
  • 2019-08-16
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2020-03-19
  • 1970-01-01
相关资源
最近更新 更多