自定义包含 django.forms.CheckboxInput() 的 django.forms.BooleanField() 的样式

Posted

技术标签:

【中文标题】自定义包含 django.forms.CheckboxInput() 的 django.forms.BooleanField() 的样式【英文标题】:Customize the style of a django.forms.BooleanField() containing a django.forms.CheckboxInput() 【发布时间】:2021-04-26 19:01:53 【问题描述】:

我在我的网页上添加了一个联系方式,如下所示:

我想通过以下方式设置“CC 我自己”- 复选框的样式:

    文字“CC 我自己”在其框中垂直居中。 复选框应位于文本“CC 我自己”旁边。 “前进”符号应位于文本和复选框之间,但直接位于文本旁边,并且与复选框的水平距离更大(在其右侧)。

这就是我在forms.py 中定义联系表的方式:

from django import forms

class ContactForm(forms.Form):
    # * Sender
    from_email = forms.EmailField(
        required=True,
        label='Your Email',
        widget=forms.TextInput(attrs='placeholder': 'jsmith@example.com'))

    # * Optional CC to sender
    cc_myself = forms.BooleanField(
        required=False,
        label='CC myself',
        widget=forms.CheckboxInput(attrs='class': 'fa fa-share'))

    # * Subject
    subject = forms.CharField(required=True, label='Subject')

    # * Message
    message = forms.CharField(
        widget=forms.Textarea(attrs='placeholder': 'Dear Andreas ..'),
        required=True,
        label='Message')

然后在home.html 模板中,表单显示如下:

<form style="margin-left: auto;margin-right: 0;" method="post" action="% url 'contact' %">
    % csrf_token %

    <!-- * Neat autoformatting of the django-form via "pip install django-widget-tweaks"
    Docs: https://simpleisbetterthancomplex.com/2015/12/04/package-of-the-week-django-widget-tweaks.html -->
    % for hidden in sendemail_form.hidden_fields %
         hidden 
    % endfor %

    % for field in sendemail_form.visible_fields %
    <div class="form-group">
        <label for=" field.id_for_label "> field.label </label>
         field|add_class:'form-control' 
        % for error in field.errors %
        <span class="help-block"> error </span>
        % endfor %
    </div>
    % endfor %


    <div style="text-align:center" class="form-actions">
        <button type="submit" class="btn btn-success">
            <!-- Search icons: https://fontawesome.com/icons?s=solid (syntax: class="fa fa-name-of-icon"))
            Docs on how to implement: https://***.com/questions/32612690/bootstrap-4-glyphicons-migration/41281304#41281304-->
            <span class="fa fa-paper-plane"></span> Send Message
        </button>

        <!-- Add horizontal space: https://***.com/questions/31198170/want-to-add-spacing-between-buttons/31199399#31199399 -->
        &nbsp;
        <!-- Add cancel-button redirecting to "home" according to the following docs: https://simpleisbetterthancomplex.com/2015/12/04/package-of-the-week-django-widget-tweaks.html -->
        <a href="% url 'home' %" class="btn btn-secondary">
            <span class="fa fa-times"></span> Cancel
        </a>
    </div>

</form>

编辑我的项目中使用的 CSS 样式(bootstrap 4.x):

在我所有模板周围的base.html 中,包括以下内容:

<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
    integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

<!-- Docs for including fontawesome: https://***.com/a/41281304/12298276 -->
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

在尝试@Danoram 的第一个建议后编辑:

结果是这样的(唯一的修改是复选框内“前进”-符号的位置:

我想显示 help_text='决定是否应将消息转发给您。'在灰色复选框下方,就像其他字段一样。此外,与标签文本“CC 我自己”相比,复选框的高度仍然大得多。最后但并非最不重要的一点是,整个联系表格列的格式已被扭曲。尤其是后者应该是固定的,否则我不能这样实现。

【问题讨论】:

你在使用引导程序吗?如果您需要帮助设置表单字段的样式,我们需要知道它们已经在使用什么 css 设置样式。 感谢您的评论。我刚刚在编辑中包含了所需的信息。 【参考方案1】:

这是我最好的尝试(保留复选框的大小)。

使用 if 检查单独呈现 cc 字段。

虽然这样做我必须从复选框输入中删除类并将它们直接放入 html 中

forms.py

cc_myself = forms.BooleanField(
        required=False,
        label='CC myself',
        widget=forms.CheckboxInput())

home.html

<form style="margin-left: auto;margin-right: 0;" method="post" action="% url 'contact' %">
    % csrf_token %

    <!-- * Neat autoformatting of the django-form via "pip install django-widget-tweaks"
        Docs: https://simpleisbetterthancomplex.com/2015/12/04/package-of-the-week-django-widget-tweaks.html -->
    % for hidden in sendemail_form.hidden_fields %
     hidden 
    % endfor %

    % for field in sendemail_form.visible_fields %
        % if field.label == 'CC myself'%
            <div class="row form-group">
                <div class="col-3 col-lg-2 col-xl-auto">
                    <label> field.label  <label for=" field.id_for_label " class="fa fa-share"></label></label>
                </div>
                <div class="col-2">
                     field|add_class:'form-control' 
                </div>
            </div>

        % else %
            <div class="form-group">
                <label for=" field.id_for_label "> field.label </label>
                 field|add_class:'form-control' 
                % for error in field.errors %
                    <span class="help-block"> error </span>
                % endfor %
            </div>

        % endif %
    % endfor %


    <div style="text-align:center" class="form-actions">
      <button type="submit" class="btn btn-success">
        <!-- Search icons: https://fontawesome.com/icons?s=solid (syntax: class="fa fa-name-of-icon"))
                Docs on how to implement: https://***.com/questions/32612690/bootstrap-4-glyphicons-migration/41281304#41281304-->
        <span class="fa fa-paper-plane"></span> Send Message
      </button>

      <!-- Add horizontal space: https://***.com/questions/31198170/want-to-add-spacing-between-buttons/31199399#31199399 -->
      &nbsp;
      <!-- Add cancel-button redirecting to "home" according to the following docs: https://simpleisbetterthancomplex.com/2015/12/04/package-of-the-week-django-widget-tweaks.html -->
      <a href="% url 'home' %" class="btn btn-secondary">
        <span class="fa fa-times"></span> Cancel
      </a>
    </div>

  </form>

【讨论】:

感谢您的建议。我想显示 help_text='决定是否应将消息转发给您。在灰色复选框下方,就像其他字段一样。此外,与标签文本“CC 我自己”相比,复选框的高度仍然大得多。最后但并非最不重要的一点是,整个联系表格列的格式已被扭曲。尤其是后者可以修复,这会很棒。我在上面的问题中包含了最新结果的屏幕截图。

以上是关于自定义包含 django.forms.CheckboxInput() 的 django.forms.BooleanField() 的样式的主要内容,如果未能解决你的问题,请参考以下文章

包含自定义对象的 NSMutableDictionaries 的 NSCoding

自定义 Qt 设计器小部件:包含自定义垂直布局的滚动区域

如何将自定义对象保存在包含更多自定义对象的数组中

如何创建自定义 UIMenuController 仅包含默认项目以外的自定义项目?

包含另一个自定义对象数组的自定义对象数组上的 NSPredicate

Visual Studio 自定义包含路径在链接时导致符号错误