我正在尝试使用 django模板语言生成动态html表,但我还无法做到这一点。
以下是有关我的 Views.py 和 table.html
的一些信息Views.py
Class table(TemplateView):
template_name = 'table.html'
def get(self, request):
header = {'header':['#', 'chemblID','Preferable Name']}
rows = {'rows':{
'id':[1,2,3],
'chemblid':[534988,31290, 98765],
'prefName':['A', 'B', 'C']}}
return render(request,self.template_name, header,rows)
(由于我仍在测试中,所以数据是硬编码的。但是应该根据用户输入进行更改。)
table.html
<table class="table">
<thead>
<tr>
{% for k in header %}
<th>{{k}}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for r in rows %}
<tr>
{% for e in r %}
<td>{{e.id}}</td>
<td>{{e.chemblid}}</td>
<td>{{e.prefName}}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
我正在尝试生成如下内容:
--------------------------------------------------------------
| # | chemblID | Preferable Name |
--------------------------------------------------------------
| 1 | 534988 | A |
--------------------------------------------------------------
| 2 | 31290 | B |
--------------------------------------------------------------
| 3 | 98765 | C |
--------------------------------------------------------------
| ... | ... | ... |
--------------------------------------------------------------
预先感谢您花时间
答案 0 :(得分:0)
您可以使用get_context_data方法将上下文发送到模板
Class table(TemplateView):
template_name = 'table.html'
def get_context_data(self, **kwargs):
ctx = super(table, self).get_context_data(**kwargs)
ctx['header'] = ['#', 'chemblID','Preferable Name']
ctx['rows'] = [{'id':1, 'chemblid':534988,'prefName':'A'},
{'id':2, 'chemblid':31290,'prefName':'B'},
{'id':3, 'chemblid':98765,'prefName':'C'}]
return ctx
您可以删除html中的多余循环
<table class="table">
<thead>
<tr>
{% for k in header %}
<th>{{k}}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for r in rows %}
<tr>
<td>{{r.id}}</td>
<td>{{r.chemblid}}</td>
<td>{{r.prefName}}</td>
</tr>
{% endfor %}
</tbody>
</table>
答案 1 :(得分:-1)
在模板中 只需更改表类
<table class="table table-bordered">
在视图中
return render(request,self.template_name,{"header":header,"rows":rows})