从Django模板语言生成动态HTML表

时间:2018-07-27 11:00:01

标签: django python-3.x html-table django-templates

我正在尝试使用 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              |
--------------------------------------------------------------
|    ...     |        ...         |           ...             |
--------------------------------------------------------------

预先感谢您花时间

2 个答案:

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