2013-07-01 82 views
1

我需要在Django中渲染動態矩陣窗體(nrows x ncols)。Django - 如何渲染矩陣

的格式如下:

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)})) 

但我stucked與模板。我的想法是執行一個典型的雙循環(列和行),然後分別引用矩陣的每個元素,但在Django中是不可能的:我應該使用{{matrix_form.c _ {{row} } _ {{col}}}} ...

您的建議是什麼?

+0

使用的顯示錶? –

+0

使用模板標籤呈現html – karthikr

+1

@karthikr如果我們把頭放在一起,我們可能會產生一個可行的答案;) –

回答

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>