在 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 中,为啥我的表单上下文变量消失了?的主要内容,如果未能解决你的问题,请参考以下文章