我正在尝试逐个显示Django表单的各个字段,因为我想更改某些属性。
这是我的forms.py。为清晰起见,我将其缩减为一个字段。
from django import forms
class NameForm(forms.Form):
name = forms.CharField(max_length=100)
如果我完全渲染表单,它的效果非常好。我的HTML代码 -
<form style="text-align:center; padding-bottom: 2%" action="/contact/" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
</form>
上述代码的页面源代码如下 -
<p><label for="id_name">Name:</label> <input id="id_name" maxlength="100" name="name" type="text" /></p>
当我尝试使用{{ form.name }}
代替{{form}}
来渲染单个字段时出现问题。此页面源显示为空。没有形成HTML。
我也试过了 -
{% for field in form %}
<div class="fieldWrapper">
{{ field }}
</div>
{% endfor %}
为此呈现的HTML就像 -
<div class="fieldWrapper">
<
</div>
<div class="fieldWrapper">
p
</div>
<div class="fieldWrapper">
>
</div>
<div class="fieldWrapper">
<
</div>
<div class="fieldWrapper">
l
</div>
<div class="fieldWrapper">
a
</div>
<div class="fieldWrapper">
b
</div>
<div class="fieldWrapper">
e
</div>
<div class="fieldWrapper">
l
</div>
<div class="fieldWrapper">
</div>
<div class="fieldWrapper">
f
</div>
<div class="fieldWrapper">
o
</div>
<div class="fieldWrapper">
r
</div>
<div class="fieldWrapper">
我还没有发布完整的HTML源代码,但似乎循环是打印从表单呈现的HTML代码的每个字符,好像我们将打印出来的前几个字符组合成HTML格式 -
<p><label for>
依旧......
请解释为什么会这样。
答案 0 :(得分:1)
请检查您从视图中返回的内容。 如果您的视图返回form.as_p,则可能会发生这种情况。 这可以通过仅返回表单来纠正。 它应该工作!如果它仍然无效,发布视图和整个模板。
答案 1 :(得分:0)
如果您知道该字段的名称,则可以单独呈现它:
<div class="fieldWrapper">
{{ form.myfield.errors }}
<label for="{{ form.myfield.id_for_label }}">Label for myfield : </label>
{{ form.myfield }}
</div>
(如果您在Form类中定义了标签,也可以使用{{form.myfield.label_tag}})
否则,如果你想要一个for,你就可以这样做:
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
对我来说效果很好。如果您仍有问题,我认为它必须在您的其余代码中。如果是,则显示输入模板:)