从 django 模板语言生成动态 HTML 表格

Posted

技术标签:

【中文标题】从 django 模板语言生成动态 HTML 表格【英文标题】:Generating a dynamic HTML table from django template language 【发布时间】:2019-01-04 11:56:21 【问题描述】:

我正在尝试使用 django 模板语言生成一个动态 html 表格,但我还没有做到。

这是关于我的 Views.pytable.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 表格的主要内容,如果未能解决你的问题,请参考以下文章

django-模板

Django入门学习--深入模板(templates)

Django入门学习--深入模板(templates)

[Django学习]模板

Django之模板Template

django基础知识之模板: