向Django crispy表单字段添加额外的HTML标记和属性
我正在使用django crispy表单和引导,我想在为单个字段呈现的HTML中添加一些额外的HTML 例如,如果我的表单包含向Django crispy表单字段添加额外的HTML标记和属性,django,twitter-bootstrap,django-forms,django-crispy-forms,Django,Twitter Bootstrap,Django Forms,Django Crispy Forms,我正在使用django crispy表单和引导,我想在为单个字段呈现的HTML中添加一些额外的HTML 例如,如果我的表单包含 recipients = forms.CharField(label='To',widget=forms.TextInput( attrs={'placeholder': 'Enter phone number, contact or group (add as many as you like)'})) 然后,正常渲染(使用引导模板)是 到* 我想做的是
recipients = forms.CharField(label='To',widget=forms.TextInput(
attrs={'placeholder': 'Enter phone number, contact or group (add as many as you like)'}))
然后,正常渲染(使用引导模板)是
到*
我想做的是在最后一个结束div之前显示一些额外的HTML。所以看起来
<div id="div_id_recipients" class="control-group">
<label for="id_recipients" class="control-label requiredField">
To<span class="asteriskField">*</span>
</label>
<div class="controls">
<input class="textinput textInput" id="id_recipients" name="recipients" placeholder="Enter phone number, contact or group (add as many as you like)" type="text">
</div>
<div class="controls-aside">
<button type="button" class="btn">Address Book</button>
<button type="button" class="btn">Add Contact</button>
</div>
</div>
到*
通讯录
添加联系人
我知道我可以用自定义模板替换此字段的现有模板,但我希望能够在不进行复制/粘贴的情况下重新使用其模板,因为这会使其不易维护
那么,实现这一点的最佳方式是什么?我还想在标签上添加一个额外的类,如果有人可以建议如何做
Div
中,也可以使用i=self.helper.layout.fields.index('guest\u email'))
self.helper.layout.insert(
i+1,
HTML(''.format(
反转“lazy”(“邀请客人”),
_(“邀请参加聚会”)
))
我在谷歌上搜索了一个有关Crispy表单的HtmlRapper类示例,这样我就可以做一件更漂亮的事情:
self.helper['guest_email'].wrap(HTMLWrapper(
'guest_email',
before='',
after='<a href="{}">{}</a>'.format(href, title))
self.helper['guest_email'].wrap(HTMLWrapper)(
“来宾电子邮件”,
在=''之前,
after=''.format(href,title))
如果我最终创建了一个,我会回来发布它。对我来说,它就是这样工作的:
from crispy_forms.layout import Field, HTML
self.helper["some_field_name"].wrap(Field, HTML("<p>Example</p>"))
来自crispy_forms.layout导入字段,HTML
self.helper[“some_field_name”].wrap(字段,HTML(“示例”)
使用HTML的好处是,它还提供了使用上下文变量的可能性。Crispy forms允许您覆盖表单布局并添加元素,您阅读过文档吗?:我已经非常详尽地浏览了文档好几次。布局覆盖不允许我在控制组w中添加内容在这里我需要它,除非我为它们编写自定义模板。但是还有一个可维护性问题,因为我必须使我的模板与标准模板保持一致。我想我目前的主要选择是查看设计师是否可以更改模板,以便将内容移到控制组之外。如果您阅读更多仔细地说,您可以使用可用的标记在forms.py文件中创建表单布局,特别是像
按钮('address\u book','address book')这样的标记
@petkostas是的,我很清楚这个选项。但是,正如我之前所说,这个选项不允许我在引导控制组
中添加HTML。它所做的只是在上一个控制组
的末尾添加一个新的控制组
。这是一个简单的解决方案,我不需要问如果设计允许的话,可以这样做。对不起,我的坏消息,没有看到控制组,在这种情况下,是的,您将需要一个自定义模板来覆盖该行为,除非您的设计允许您将元素分组到另一个包装类中,在这种情况下,您可以使用crispy forms的包装类。
self.helper['guest_email'].wrap(HTMLWrapper(
'guest_email',
before='',
after='<a href="{}">{}</a>'.format(href, title))
from crispy_forms.layout import Field, HTML
self.helper["some_field_name"].wrap(Field, HTML("<p>Example</p>"))