0

我正在使用 Django Forms 制作一个 html 表单。我使用BoundFields是因为我的表单布局中有一些特殊的东西。

我的表单中有一个带有 RadioSelect 小部件的 ChoicesField。我手动迭代选择,因为我想在里面放一个 img <li>

<ul>
    {% for country in form.country %}
        <li>
            <img src="{{ MEDIA_URL }}country_icons/country_{{ country.value }}.png">
            {{ country }}
        </li>
    {% endfor %}
</ul>

但现在输出不包括输入元素上的 id 标签:

<ul>
    <li>
        <img src="/media/country_icons/country_nl.png">
        <label>
            <input type="radio" value="nl" name="country" checked="checked">
            Netherlands
        </label>
    </li>
    <li>
        <img src="/media/country_icons/country_de.png">
        <label>
            <input type="radio" value="de" name="country">
            Germany
        </label>
    </li>
</ul>

同时,当我不会遍历选项并仅输出该字段时:

{{ form.country }}

将输出:

<ul>
    <li>
        <label for="id_country_0">
            <input id="id_country_0" type="radio" value="nl" name="country" checked="checked">
            Netherlands
        </label>
    </li>
    <li>
        <label for="id_country_1">
            <input id="id_country_1" type="radio" value="de" name="country">
            Germany
        </label>
    </li>
</ul>

所以我的问题是当我手动迭代选择时 id 字段不存在。这使得我的 css/javascript 选择器不一致。

所以我的问题是,有什么方法可以包含 id-tag 吗?无论如何,这种行为是有意的吗?或者这可能是一个错误?有人遇到类似的问题吗?

4

1 回答 1

1

我不知道为什么它会这样工作。我的猜测是这些 id 是由表单 api 创建的迭代器创建的。单个国家/地区不知道迭代器(它可能出现在模板中而不出现在 for 循环中),因此无法创建 id。

要回答您的其他问题 - 是的,您可以自己构建输入以包含 id。

就像是 -

{% for country in form.country %}
    <li>
        <img src="{{ MEDIA_URL }}country_icons/country_{{ country.value }}.png">
        <label for="id_country_{{ forloop.counter0 }}">
            <input id="id_country_{{ forloop.counter0 }}" type="radio" value="{{ country.value }}" name={{ country }}>
        </label>
        {{ country.name }}
    </li>
{% endfor %}

查看有关循环模板的文档

于 2013-02-12T17:30:50.317 回答