从 django 模板语言生成动态 HTML 表格
Posted
技术标签:
【中文标题】从 django 模板语言生成动态 HTML 表格【英文标题】:Generating a dynamic HTML table from django template language 【发布时间】:2019-01-04 11:56:21 【问题描述】:我正在尝试使用 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 |
--------------------------------------------------------------
| ... | ... | ... |
--------------------------------------------------------------
提前感谢您抽出宝贵时间
【问题讨论】:
在视图上,您必须在渲染函数中将上下文作为 dict 发送。在 aboe 示例中,您没有这样做。这就是为什么您无法在模板render(request,self.template_name, context='header':header,'rows':rows)
上获取变量值的原因
【参考方案1】:
在模板中 只需更改表类
<table class="table table-bordered">
在视图中
return render(request,self.template_name,"header":header,"rows":rows)
【讨论】:
误点击提交,没有给出完整答案....现在更新了 还是不行。 with: return render(request,self.template_name, header,rows) 我可以做表的标题,但不能做行。使用 return render(request,self.template_name, context ="header": header,"rows":rows) 我只是得到一个奇怪的表,比如第一行,其中有 1 列,里面有文本“Header”,第二行有 12 个空列【参考方案2】:您可以使用 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>
【讨论】:
非常感谢!有效!使用带有模板引擎的上下文字典真的很糟糕!以上是关于从 django 模板语言生成动态 HTML 表格的主要内容,如果未能解决你的问题,请参考以下文章