当包含在其他模板中时,Django 通用 FormView 不显示

Posted

技术标签:

【中文标题】当包含在其他模板中时,Django 通用 FormView 不显示【英文标题】:Django generic FormView not showing when included in other template 【发布时间】: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编辑 【参考方案1】:

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

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

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

解决方案:

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

context['form'] = EnrollForm()

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

【讨论】:

这看起来不错,但不幸的是,当我创建上下文并添加“表单”条目时,错误仍然存​​在。有什么想法吗? 新页面是否有多个表单? 不,只有一个

以上是关于当包含在其他模板中时,Django 通用 FormView 不显示的主要内容,如果未能解决你的问题,请参考以下文章

django 表单:如何检查模板中的复选框状态

django - 在包含的模板中时 javascript 不起作用

Django 模板破坏 DataTable

使用 Form 标签在 Django 模板中获取模型的名称

带有 css/js 的 Django“包含”模板

django 模板中的“form.as_p”从何而来?