【问题标题】:How to style django-multiselectfield with CSS如何使用 CSS 设置 django-multiselectfield 样式
【发布时间】:2017-12-24 13:04:57
【问题描述】:

我在我的模型表单中使用“django-multiselectfield”,因此用户可以在我的表单中选择多个“区域”。我现在想知道的是如何使用 css 设置多选字段的样式。

我尝试像往常对所有其他类型的模型字段所做的那样,向模板中的表单字段添加一个类,但没有运气:

{% render_field form.area class="area" %}

任何帮助将不胜感激。

【问题讨论】:

    标签: python django django-models django-forms django-templates


    【解决方案1】:

    这在`django-multiselectfield' 文档中有所描述。具体来说,

    可以在表单模板中自定义此小部件的 HTML。为此,您需要遍历表单{field}.field.choices。这是一个示例,它在名为 providersMultiSelectField 的复选框下方/之后显示字段标签:

    【讨论】:

    • 谢谢你,杰森。我仍在努力为我的 django-multiselectfield 上的复选框设置样式。我可以为每个复选框设置标签的样式(例如 )但是当我尝试设置复选框本身的样式时(例如 ),它不会工作。任何帮助将不胜感激!
    【解决方案2】:

    这是我所做的一个例子。

    {% for field in form %}  
         <div class="fieldWrapper">{{ field.errors }}
         <input  type="{{ field.field.widget.input_type }}"  name="{{ field.html_name }}"  id="{{field.id_for_label}}"   class="col-12 input-login" placeholder="{{field.label}}"  >
         {% if field.help_text %}
            <p class="help">{{ field.help_text|safe }}</p>
         {% endif %}
         </div>
    {% endfor %}
    

    现在您可以自定义该字段,就好像它是一个简单的 html 输入字段一样。 这个page有一个精彩的详细解释。向维托致敬

    -----编辑-----

    差点忘了。这是范式的例子。您必须通过 django-multiselectfield 的官方文档来获取字段属性名称,并替换相应的属性

    【讨论】:

    • 谢谢你,维平。我仍在努力为我的 django-multiselectfield 上的复选框设置样式。我可以为每个复选框设置标签的样式(例如 )但是当我尝试设置复选框本身的样式时(例如 ),它不会工作。任何帮助将不胜感激!
    • 首先,使用 django 默认表单,并在浏览器中检查代码,查看渲染的纯 html 代码,记下这些,特别是输入属性和 form_id,输入 id 等,然后自定义您的表单,并制作确保出现上述所有属性。例如复选框 id、值等。
    • 一旦我被困在一个表格中,我输入了所有表格但忘记设置 field.value
    • 嗨 Vipin,我已经尝试过了,但仍然没有运气。我当前的代码:{% for value, text in form.area.field.choices %} &lt;div class="area_div"&gt; &lt;input id="area_input" name="{{ form.area.name }}" type="checkbox" value="{{ value }}"&gt; &lt;label class="area_text"&gt;{{ text }}&lt;/label&gt; &lt;/div&gt; {% endfor %} 这是我的 CSS .area_text{ font-family: 'Roboto', sans-serif; } #area_input{ border-radius: 0px; } 我可以很好地设置标签(area_text)的样式,但我根本无法设置输入复选框的样式!任何帮助都会很棒!
    • 正如我之前在圣诞节假期中所说的那样。但乍一看,不要明确给出 id,你能不能做一个简单的 form.as_p 并比较它当前呈现的代码,只需浏览器检查两个代码,并排并将其发布在这里。
    【解决方案3】:

    我建议您手动渲染表单并循环遍历它。

    假设您有一个 Choice 模型,其中包含一个 Question 模型的外键,您可以这样做:

    <form class="qform" action="" method="post">
        {% csrf_token %}
        <p class="title">{{ form.question }}</p>
        {% for choice in form.choice_set.all %}
            <input type="checkbox" name="{{ choice }}" id="{{ choice }}{{ forloop.counter }}" 
                    value="{{ choice.id }}">
            <label for="{{ choice }}{{ forloop.counter }}">{{ choice }}</label>
        {% endfor %}
    </form>
    

    您可以在style.css 中引用输入和标签,例如:

    input[type="checkbox"]{
        some: stuffs...;
    }
    
    label {
        some: stuffs...;
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 嗨,bunya,我已经尝试过了,但仍然没有运气。我当前的代码:{% for value, text in form.area.field.choices %} &lt;div class="area_div"&gt; &lt;input id="area_input" name="{{ form.area.name }}" type="checkbox" value="{{ value }}"&gt; &lt;label class="area_text"&gt;{{ text }}&lt;/label&gt; &lt;/div&gt; {% endfor %} 这是我的 CSS .area_text{ font-family: 'Roboto', sans-serif; } #area_input{ border-radius: 0px; } 我可以很好地设置标签(area_text)的样式,但我根本无法设置输入复选框的样式!任何帮助都会很棒!
    • @WillDpard 你能从你的模型、视图和表单中发布 coce 吗?
    猜你喜欢
    • 2022-06-15
    • 2021-02-15
    • 2019-01-07
    • 2016-07-30
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多