【问题标题】:Django generic FormView not showing when included in other template当包含在其他模板中时,Django 通用 FormView 不显示
【发布时间】:2018-12-05 14:40:21
【问题描述】:

首先,目前的工作是什么:

我在forms.py中定义了一个表单:

class EnrollForm(forms.Form):
    course_id = forms.IntegerField(required=True)

    def enroll(self):
        print(self.cleaned_data)

我在views.py的视图中构建了上述表单:

class EnrollView(FormView):
    template_name = 'core/enroll.html'
    form_class = EnrollForm
    success_url=''

    def form_valid(self, form):
        form.enroll()
        return super().form_valid(form)

我在enroll.html表示:

<form action="." method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Enroll" />
</form>

所以,当我访问localhost:8000/core/enroll/ 时,我看到了这个表单的全部力量:

但是,当我尝试使用

将此文件包含在另一个文件中时
{% include "core/enroll.html" %}

在另一个 html 文件中,仅显示按钮,而 enroll.html 中的 {{ form }} 标记无法解析任何内容,只是默默地失败,显示:

EDIT1:这是我试图从中包含表单的文件:

<h1>{{ course.title }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<ul>
{# reverse lookup on codes with course foreignkey relationship #}
{% for code in course.code_set.all %}
  <li>{{ code.code }}</li>
{% endfor %}
</ul>

{% include "core/enroll.html" %}

【问题讨论】:

  • 模板的CCS是否支持嵌套模板?在您的页面上尝试检查元素以查看存在哪些 HTML 对象。对象可能存在于页面范围(容器)之外,因此不可见。
  • @t0bi 我已经检查过了,但忘记将其添加到帖子中。令牌和提交按钮之间的页面上没有代码。
  • 奇怪。如果您发布更多您正在使用的其他模板,这可能会有所帮助。
  • 用代码@t0bi编辑

标签: python django django-forms django-templates django-generic-views


【解决方案1】:

所以事情就是这样。当您访问 localhost:8000/core/enroll/ 时,django 会调用视图 EnrollView,您可以在其中定义表单是什么并将其传递给上下文。

在上下文中,它的 html 页面 enroll.html 在这种情况下知道什么是表单变量。

另一方面,当您访问另一个页面时,永远不会调用 EnrollView。包含的部分{% include "core/enroll.html" %},尝试渲染表单但不知道表单变量是什么。

解决方案:

呈现相关 html 页面的视图(您想查看表单但不能查看的位置)应在上下文中添加 EnrollForm

context['form'] = EnrollForm()

类似于上面的行。然后你应该可以看到表格了。

【讨论】:

  • 这看起来不错,但不幸的是,当我创建上下文并添加“表单”条目时,错误仍然存​​在。有什么想法吗?
  • 新页面是否有多个表单?
  • 不,只有一个
猜你喜欢
  • 2013-12-16
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多