【问题标题】:Django - how to render a matrixDjango - 如何渲染矩阵
【发布时间】:2013-07-01 17:16:31
【问题描述】:

我需要在 Django 中渲染一个动态矩阵形式(nrows x ncols)。

表格如下:

class MatrixForm(forms.Form):

    def __init__(self, *args, **kwargs):
        self.ncols = kwargs.pop('ncols', 1)
        self.nrows = kwargs.pop('nrows', 1)

        super(MatrixForm, self).__init__(*args, **kwargs)

        for i in range(0,self.ncols):
            for j in range(0,self.nrows):
                field = forms.CharField(label="",max_length=2)
                self.fields['c_' + str(i) + '_' + str(j)] = field

视图如下:

def my_matrix(request):
    [nrows,ncols] = [3,4]

    my_form = MatrixForm(nrows=nrows,ncols=ncols)

    return render_to_response('my_matrix.html', RequestContext(request, 
                        {'matrix_form':my_form,"nrows":range(nrows),"ncols":range(ncols)}))

但我被模板卡住了。我的想法是执行一个典型的双循环(列和行),然后单独引用矩阵的每个元素,但在 Django 中这是不可能的:我应该使用类似 {{ matrix_form.c_{{ row } }_{{ col }} }}...

您对执行它有什么建议?

【问题讨论】:

  • 使用表格显示?
  • 使用模板标签渲染html
  • @karthikr 如果我们齐心协力,我们或许能够得出一个可行的答案 ;)
  • 当然。继续.. 将其标记为答案:)

标签: django django-templates


【解决方案1】:

我在另一个问题here中复制了解决方案

应该在视图中构建表格(包括标签)。 forloop.first 可用于将标签放入

s. table = [
     ['', 'Foo', 'Bar', 'Barf'],
     ['Spam', 101, 102, 103],
     ['Eggs', 201, 202, 203], ]

<table>
    {% for row in table %}
        <tr>
        {% for cell in row %}
            {% if forloop.first or forloop.parentloop.first %} <th> {% else %} <td> {% endif %}
                {{ cell }}
            {% if forloop.first or forloop.parentloop.first %} </th> {% else %} </td> {% endif %}
        {% endfor %}
        </tr>
    {% endfor %}
</table>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2021-11-22
    • 2019-05-22
    相关资源
    最近更新 更多