<select> 内循环的 Django 模板在选择后呈现值

Posted

技术标签:

【中文标题】<select> 内循环的 Django 模板在选择后呈现值【英文标题】:Django template for loop inside <select> renders values after the select 【发布时间】:2016-12-05 03:24:50 【问题描述】:

我正在尝试使用 JQuery 小部件 Multiple select 而不是默认值。

如您所见,我正在尝试将选择选项直接呈现到 &lt;select&gt; 标记中,但奇怪的是它是在 &lt;/select&gt; 标记之后呈现的。 (for循环在这个标签里面,不在后面)

编辑: 简单地说,这是在模板中:

<tag> % for choice in field.choices % choice %endfor% </tag> 

但 Django 将其呈现为:

<tag></tag>  % for choice in field.choices % choice  %endfor%

这是渲染的:

<div class="col-xs-5">
            <select name="from[]" id="multiselect" class="form-control" size="8" multiple="multiple">
</select> # options are render after this tag

<option value="97">Slovak</option>
<option value="98">Russian</option>
<option value="99">Magyar</option>
<option value="100">English</option>
<option value="101">Croatian</option>
<option value="102">Spanish</option>
<option value="103">Dutch</option>
<option value="104">Estonian</option>
<option value="105">French</option>
<option value="106">DSADSA</option> etc....

这是模板:

% extends 'base.html' %
% load crispy_forms_tags %
% load static %
% block head %
    <script type="text/javascript" src="% static "js/scripts/multiselect.min.js" %"></script>

    <script type="text/javascript">
        jQuery(document).ready(function ($) 
            $('#multiselect').multiselect();
        );
    </script>
% endblock %
% block content %
    <h1>Become a translator</h1>
    <form id="user_form" method="post" action="">
        % csrf_token %
         register_as_translator_form | crispy 
            <button class="accordion" type="submit" name="submit" value="Register">Register</button>
    </form>
    <div class="row">
        <div class="col-xs-5">
            <select name="from[]" id="multiselect" class="form-control" size="8" multiple="multiple">
                % for choice in register_as_translator_form.languages %
                     choice 
                % endfor %
            </select>
        </div>

        <div class="col-xs-2">
            <button type="button" id="multiselect_rightAll" class="btn btn-block"><i
                    class="glyphicon glyphicon-forward"></i></button>
            <button type="button" id="multiselect_rightSelected" class="btn btn-block"><i
                    class="glyphicon glyphicon-chevron-right"></i></button>
            <button type="button" id="multiselect_leftSelected" class="btn btn-block"><i
                    class="glyphicon glyphicon-chevron-left"></i></button>
            <button type="button" id="multiselect_leftAll" class="btn btn-block"><i
                    class="glyphicon glyphicon-backward"></i></button>
        </div>

        <div class="col-xs-5">
            <select name="to[]" id="multiselect_to" class="form-control" size="8" multiple="multiple"></select>
        </div>
    </div>
% endblock %

不幸的是,它呈现如下:

你知道该怎么做吗?

【问题讨论】:

我非常怀疑这是 Django 做的。请查看呈现的 HTML 源代码——不是开发人员工具中解释的 DOM,而是原始的 View Source 输出——并发布实际生成的内容。 @DanielRoseman 可能是 Django(我不是专家,所以我不确定)。正如艾哈迈德在下面的答案中所说。不知道是错误还是什么..但他的回答有效。现在,for 循环正在 【参考方案1】:

如果register_as_translator_form.languages返回字符串列表可能会发生这种情况,试试这个方法:

    <select name="from[]" id="multiselect" class="form-control" size="8" multiple="multiple">
        % for choice in register_as_translator_form.languages %
            <option value=" choice "> choice </option>
        % endfor %
    </select>

【讨论】:

谢谢艾哈迈德,这似乎有效。但是有一个小问题。似乎其中一个选择是 @Milano 我不知道register_as_translator_form.languages 返回什么,但是您可以在视图中进行一些过滤,并且只将语言数据传递给您的视图 我想通了,我刚刚把它改成了 for value,text in register_as_translator_form.languages.field.choices and value = " value "> key.. .它的工作原理。谢谢!

以上是关于<select> 内循环的 Django 模板在选择后呈现值的主要内容,如果未能解决你的问题,请参考以下文章

djang增删改查

如何根据对象属性字符串过滤“ngFor”循环内的项目

select循环读取数据

js拼接实现下拉列表框

在创建 <select>s 的 js 循环中设置选定的 <option>

vue 腾讯云点播播放视频(循环)