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

Posted

技术标签:

【中文标题】Django 将类添加到表单 <input ..> 字段【英文标题】:Django add class to form <input ..> field 【发布时间】:2011-07-14 05:05:27 【问题描述】:

我们正在寻找一种将 CSS 类属性添加到 Django 表单的 &lt;input..&gt; 字段的解决方案。我们已经看到建议我们将字段包装在 &lt;div&gt; http://docs.djangoproject.com/en/1.2/topics/forms/#customizing-the-form-template 中的建议,但该建议似乎主要适用于字段标签,而不是 &lt;input ...&gt;

如果您尝试在&lt;input&gt; 字段周围创建边框,则此特定建议不起作用。在这种情况下,&lt;div&gt; 将应用于边界框,而不是实际的输入字段。例如.wrapper border: 1px solid #666;line-height:22px;height:22px;padding:3px 5px;width:205px; 将在字段周围创建一个框,而不是替换默认的&lt;input ...&gt; 边框。

我们已经退回到通过应用于 Form 类的小部件来应用该类,但这缺乏一定程度的代码优雅(并且违反了 DRY)。例如,这解决了需求。

class ContactUsForm(forms.Form):
    name = forms.CharField(widget=forms.TextInput(attrs='class':'form_text'))

当然,这将表单与 CSS 紧密地联系在一起。如果您尝试将类属性应用于&lt;input ..&gt; 字段,而表单是基于酷炫的新forms.ModelForm 系统,那么它会变得更加复杂。

我们花了两天的大部分时间来研究这个问题(并研究 Django 源代码),看起来我们可能在这个特定问题上达到了 Django 的最远边缘——但我们只是想在 *** 上试一试,看看是否有其他人有洞察力。

感谢您的任何见解。

最后一条评论:如果问题在于我们对 CSS 的理解(而不是 django),请随时提出来。我们花了相当多的时间来处理 CSS 选项,但似乎没有一个能让我们实现所需的效果——即替换默认的 &lt;input...&gt; 边框。

【问题讨论】:

用 CSS 格式化 很好,但如果你想添加,例如,form-control 用于 Bootstrap/MDBootstrap,请参阅 Add class to form field Django ModelForm - Stack Overflow 【参考方案1】:

你可以像这样使用子选择器:

.fieldWrapper > input border: 1px solid #666;line-height:22px;height:22px;padding:3px 5px;width:205px;

【讨论】:

绝妙的解决方案!由于历史兼容性问题,我通常不会考虑子选择器,但如果您不介意针对现代浏览器 - 这不是问题。感谢您提供出色的解决方案。

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

将类添加到 django 表单小部件字段

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

如何将类、id、占位符属性添加到 django 模型表单中的字段

将属性添加到 django ModelForm 字段的 <input> 标记

将属性添加到 django ModelForm 字段的 <input> 标记

无法将类添加到 Laravel 表单选择