如何为双嵌套for循环编码计数?

时间:2014-02-19 23:56:11

标签: javascript jquery django

我正在尝试将片段号传递给我的html。这将用于使用javascript更新所选标记​​的内容。我的所有标签都是由django中的双嵌套for循环创建的。但是从我的尝试来看,我没有成功。

以下是javascript代码:

$('td#'+new_data['piece_number']).html(new_data['img']);

这是有问题的双嵌套for循环:

<table id="table" bgcolor="{{puzzle.color_hash}}">
    <tbody>
    {% for x in n_rows %}
        <tr id='r{{x}}'>
            {% for y in n_cols %}
                <td id='{{count}}' height='{{puzzle.piece_res_height}}' width='{{puzzle.piece_res_width}}'>
                </td>
            {% endfor %}
        </tr>
    {% endfor %}
    </tbody>
</table>

我希望{{count}}中的总迭代计数,但根据我的理解,django不允许你在渲染器中进行变量操作

我正在寻找一个结果,例如按列表行...

1 2 3

4 5 6

7 8 9

哪里有3行3列。 9件。每个都具有件号的td id

即。第2行第2列的td id为5

1 个答案:

答案 0 :(得分:1)

你可以向html文件发送两个wariables而不是一个count并更改id命名的ida。

<td id='r{{x}}d{{y}}' height='{{puzzle.piece_res_height}}' width='{{puzzle.piece_res_width}}'>

编辑 - 正确的解决方案

好的,我有两个解决方案。

两者都使用custom template filters

档案app/templatetags/default_filters.py

from django import template
register = template.Library()

#first way
def mod(value, arg):
    return value % arg == 0

#second way
@register.filter(name='multiply')
def multiply(value, arg):
    return value*arg

register.filter('mod', mod)

上下文发送到模板

class MainSiteView(TemplateView):
    template_name = "main_page.html"

    def get_context_data(self, **kwargs):
        context = super(MainSiteView, self).get_context_data(**kwargs)
        n_rows = n_cols = 2
        context['max_nums'] = n_rows * n_cols
        context['n_rows'] = [0, 1]
        context['n_cols'] = [0, 1]
        context['number_of_columns'] = 2
        context['range'] = [x for x in range(n_cols * n_rows)]
        return context

和模板

{% load default_filters %}
<table id="_table" bgcolor="{{puzzle.color_hash}}">
    <tbody>
    {% for x in range %}
        {% if not forloop.counter|mod:number_of_columns %}
        <tr id='_r{{x}}'>
        {% endif %}
                <td id='_{{forloop.counter0}}' height='{{puzzle.piece_res_height}}' width='{{puzzle.piece_res_width}}'>
                    ({{forloop.counter0}})
                </td>
        {% if forloop.counter|mod:number_of_columns %}
        </tr>
        {% endif %}
    {% endfor %}
    </tbody>
</table>
<table id="table" bgcolor="{{puzzle.color_hash}}">
    <tbody>
    {% for x in n_rows %}
        <tr id='r{{x}}'>
            {% for y in n_cols %}
                <td id='{{x|multiply:number_of_columns|add:y}}' height='{{puzzle.piece_res_height}}' width='{{puzzle.piece_res_width}}'>
                    [{{x|multiply:number_of_columns|add:y}}]
                </td>
            {% endfor %}
        </tr>
    {% endfor %}
    </tbody>
</table>