Django1.5 forloop.counter 不在模板中递增

Posted

技术标签:

【中文标题】Django1.5 forloop.counter 不在模板中递增【英文标题】:Django1.5 forloop.counter not incrementing in template 【发布时间】:2017-06-28 03:36:58 【问题描述】:

我似乎无法让 Django 的“forloop.counter”增加。我试图按照网络上的教程无济于事。

首先,我用 result_get_list 中存在的行数填充模板。然后我可能会更改一些值并使用 POST 提交。现在输出表中的每一行都是它自己的带有值的项目。我的控制器需要能够区分每一行。为此,我想附加一个 ID。这是您在下面看到的“_1”(第二个代码块)。但是不是为第一行附加“_1”,而是为第二行附加“_2”,forloop .counter 没有按我的预期工作,并且每一行都附加了“_1”。

我的模板代码如下:

<form method="post">
% csrf_token %

    <div id="div_element">
    <table style=" float: left;" >
    <tr>
        <th ><center>Name</center></th>
        <th ><center>Version</center></th>
        <th ><center>Timestamp</center></th>
        <th ><center>Action</center></th>
    </tr>
    % if result_get_list %
        % for result_row in result_get_list %
            % for result_item in result_row %
            <tr>
                <td ><center><input type="text" readonly name="name_ forloop.counter " value=result_item.name></center></td>
                <td ><center><input type="text" readonly name="version_ forloop.counter " value=result_item.version></center></td>
                <td ><center><input type="text" name="date_ forloop.counter " value=result_item.date></center></td>
                <td ><center><select name="selected_post_action_ forloop.counter "><option>none</option><option>delete</option><option>update</option></select></center></td>
            </tr>
            % endfor %
       % endfor %
    % endif %
    </table>
    </div>

    <div id="div_nextline_section">
        <input type='submit' value='Update!'/>
    </div>

</form>

我的模板输出如下(查看html源码)

<tr>
    <td ><center><input type="text" readonly name="Name_1" value=ABCDEF></center></td>
    <td ><center><input type="text" readonly name="Version_1" value=1></center></td>
    <td ><center><input type="text" name="theDate_1" value=0></center></td>
    <td ><center><select name="selected_post_action_1"><option>none</option><option>delete</option><option>expire</option><option>update</option></select></center></td>
</tr>
<tr>
    <td ><center><input type="text" readonly name="Name_1" value=DEFGHI></center></td>
    <td ><center><input type="text" readonly name="Version_1" value=1></center></td>
    <td ><center><input type="text" name="theDate_1" value=0></center></td>
    <td ><center><select name="selected_post_action_1"><option>none</option><option>delete</option><option>expire</option><option>update</option></select></center></td>
</tr>
<tr>
    <td ><center><input type="text" readonly name="Name_1" value=GHIJKL></center></td>
    <td ><center><input type="text" readonly name="Version_1" value=1></center></td>
    <td ><center><input type="text" name="theDate_1" value=0></center></td>
    <td ><center><select name="selected_post_action_1"><option>none</option><option>delete</option><option>expire</option><option>update</option></select></center></td>
</tr>

使用 fiddler 并捕获输出,这是 POST 到控制器的当前结果(注意“_1”)

name_1=ABCDEF&ersion_1=1&date_1=0&selected_post_action_1=delete&
name_1=DEFGHI&version_1=1&date_1=0&selected_post_action_1=expire&
name_1=GHIJKL&version_1=1&date_1=0&selected_post_action_1=update

我想要的输出是(注意每一行都是递增的)

name_1=ABCDEF&ersion_1=1&date_1=0&selected_post_action_1=delete&
name_2=DEFGHI&version_2=1&date_2=0&selected_post_action_2=expire&
name_3=GHIJKL&version_3=1&date_3=0&selected_post_action_3=update

非常感谢您的帮助,谢谢!

【问题讨论】:

我应该添加这是使用 python 2.7 的 Django 1.5 【参考方案1】:

想通了。我有一个嵌套的 forloop。还有另一个参数用于引用父 forloop:forloop.parentloop.counter

% for result_row in result_get_list %
    % for result_item in result_row %
    <tr>
        <td ><center><input type="text" readonly name="name_forloop.parentloop.counter" value=result_item.name></center></td>
        <td ><center><input type="text" readonly name="version_forloop.parentloop.counter" value=result_item.version></center></td>
        <td ><center><input type="text" name="date_forloop.parentloop.counter" value=result_item.date></center></td>
        <td ><center><select name="selected_post_action_forloop.parentloop.counter"><option>none</option><option>delete</option><option>update</option></select></center></td>
    </tr>
    % endfor %
% endfor %

【讨论】:

以上是关于Django1.5 forloop.counter 不在模板中递增的主要内容,如果未能解决你的问题,请参考以下文章

django forloop.counter 操作

打开新 div 时关闭其他 div(在 forloop.counter 中)

在 Django 中的表单标签中解析 forloop.counter

在django模板中对forloop.counter进行加法操作

django 模板通过 forloop.counter 访问列表项

django 模板 forloop.counter 问题