向Django crispy表单字段添加额外的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)'})) 然后,正常渲染(使用引导模板)是 到* 我想做的是

我正在使用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)'}))
然后,正常渲染(使用引导模板)是


到*
我想做的是在最后一个结束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
    中,也可以使用

  • 关于在布局中添加HTML。上个小时,我需要一个非常定制的HTML,所以:

  • (格式)

    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>"))