【问题标题】:Django forms adding <div> after form fieldDjango 表单在表单字段后添加 <div>
【发布时间】:2013-03-15 20:57:09
【问题描述】:

下面是我的表单代码:

class FMessage(forms.Form):
    From = forms.CharField()
    To = forms.CharField()
    Subject = forms.CharField()
    Message = forms.CharField()

这是我的html代码:

<form method='POST' action='.'>
    {% csrf_token %}
    {{ form.as_p }}
    <input type='submit' value='submit'>
</form>

代码通过显示表单工作正常并且在功能上没有任何问题,但现在我需要通过 div 将表单字段包装在 html 中,如下所示:

<div id='mydiv'>
    <input ... />
<div>

我该如何解决?

【问题讨论】:

标签: python html django django-forms django-templates


【解决方案1】:

似乎您并不想使用内置的&lt;p&gt; 或&lt;table&gt; 包装的表单,而是希望显示包装在&lt;div&gt;'s 中的字段。您可以简单地遍历表单中的字段,如下所示。

{% if form %}
    <!-- Form Errors -->
    {% if form.errors %}
        <ul class="errors">
            {% for error in form.errors %}
                <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

    <!-- Display Form -->
    <form>
    {% csrf_token %}
    {% for field in form %}
        <div class="mydiv">
            <label class="mylabel">{{ field.label }}</label>
            {{ field }}
        </div>
    {% endfor %}
    </form>
{% endif %}

【讨论】:

  • 好答案。注意:您不需要在 for 循环中使用 csrf_token 标记;建议每张表格一次。 docs.djangoproject.com/en/dev/ref/contrib/csrf.
  • 哎呀,我的错,当然它应该在 for 循环之外。更新了答案。
  • 错误信息不显示...那么我该怎么做才能得到错误信息
  • 感谢您的重播我完成了我的任务...我在 mydiv 中添加了行
  • field.errors
【解决方案2】:

不要使用form.as_p 呈现表单。您需要显示表单的每个字段,例如,使用form.to。通过这种方式,您可以将字段'to'包装到一个div中

 <div>{{ form.To}} </div>

更多详情,请查看link

【讨论】:

  • 嗯 div 问题已解决,但它产生了另一个问题,标签现在丢失了 :(即使在指定之后它也没有标签 ..forms.CharField(label = 'Departure Place'
  • 上述答案的链接包含答案。您需要像这样手动指定标签:{{ form.subject.label_tag }}。 docs.djangoproject.com/en/dev/topics/forms/…
猜你喜欢
相关资源
最近更新 更多
热门标签