Django 表单在表单字段后添加 <div>

Posted

技术标签:

【中文标题】Django 表单在表单字段后添加 <div>【英文标题】:Django forms adding <div> after form field 【发布时间】: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>

我该如何解决?

【问题讨论】:

尝试对这个表单域使用自定义的Widget,像这样:***.com/a/7692039/824132 【参考方案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/…

以上是关于Django 表单在表单字段后添加 <div>的主要内容,如果未能解决你的问题,请参考以下文章

django 将占位符文本添加到表单字段

Django 将类添加到表单 <input ..> 字段

在inlineformset的形式中,我怎么知道哪些是我的默认表单字段,哪些是Django添加的字段?

如何在 Django 中使用 <div class='field_type'> 标记表单字段

Django 表单字段分组

Django Form 将类添加到 div、输入字段和标签