在 Django 中,为啥我的表单上下文变量消失了?

Posted

技术标签:

【中文标题】在 Django 中,为啥我的表单上下文变量消失了?【英文标题】:In Django, why does my form context variable disappear?在 Django 中,为什么我的表单上下文变量消失了? 【发布时间】:2014-12-06 07:37:21 【问题描述】:

以这个示例表格为例。

class TestForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)

        self.fields["test"] = forms.CharField()

在我看来,我有这个代码:

test_form = TestForm()
context['test_form'] = test_form

如果我print(test_form),它看起来会很好。现在,当我在模板中使用% debug % 时,输出如下: ... 'test_form': , ... 。换句话说,表格消失了。我怀疑这与在初始化后添加一个字段有关,但我真的很想知道为什么?如果可能的话,如何绕过看似限制。

【问题讨论】:

如果您不向我们展示视图,那么我们所能做的就是猜测问题可能是什么。为什么你认为__init__ 方法有问题?如果删除它会显示表单吗? 您可以添加更多视图代码吗?你如何将上下文发送到模板? 【参考方案1】:

您的联系人变量并没有消失:它就在那里,在您向我们展示的输出中。如果它消失了,您将不会在该字典中看到 test_form 键。

至于为什么您看不到该键的值,这仅仅是因为 python 对象的默认表示形式是这样的 <TestForm object at ....>,并且您的浏览器将尖括号解释为它忽略的未知 html 标记.

将你的调试标签放在<pre>...</pre>标签中,你会看到它就好了。

【讨论】:

我怀疑是这样,因为我有另一个显示得很好的表单,并且在调试中显示如下:'form_info': .ProfileEditForm object at 0x0000000003DCA160> 更新:刚刚尝试了您的建议,但仍然不存在。与我上面所说的完全一样。我确定调试标签是自动转义的。【参考方案2】:

要测试您的表单是否消失,您可以尝试显示它:

% for field in test_form %
     field 
% endfor %

这应该将表单的每个字段显示为 HTML。希望对您有所帮助!

【讨论】:

这不起作用,因为 test_form 甚至不存在于上下文中,就像我在问题中所说的那样。

以上是关于在 Django 中,为啥我的表单上下文变量消失了?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Django 中使用线程局部变量不好?

为啥实例变量在块内时似乎消失了?

为啥这个 Django 模板没有接收到上下文?

为啥我的 Django 表单没有引发验证错误?

在Javascript HTML中访问Django视图中的上下文变量(列表)[重复]

如果这个 django 表单本身也生成选项,为啥它不接受我的输入?