django模板语言的坑

程序需要渲染一个表格,有两种思路:
1 python直接生成html标签传给模板
2 利用django的模板语言

坑一 模板传参

一开始考虑直接用python生成html代码,然后通过给模板传参的方式传递过去:

            html='<tr> '
            tr_count =0;
            for k,v in record.items():
                if tr_count==2:
                    html = html + '</tr><tr>'
                    tr_count=0

                if v != None:
                    html=html +"<td>" + k +":"+ str(v) +"</td>"
                    tr_count+=1
            if html[-4:] == '<tr>':
                html = html[:-4]
            else:
                html = html+'</tr>'

            html = """
            <table style="width: 100%">
                    <tbody>
                        {}
                    </tbody>
            </table>
            """.format(html)
        return render(request, 'system/gis/devicedetail.html',context={'html':html})

结果发现传递给模板的内容带了双引号,浏览器解析成了字符串。

坑二: django模板语言

既然直接传参不行,那就用django的模板语言吧,结果还是被狠狠坑了一把,
下面代码是生成2列的一个table, data是一个字典,字典value[0]==0表示开始新行

data= {'a':[0,11],'b':[1,22],'c':[0,33],'d':[1,44],'e':[0,55],'f':[1,66]}
                <table style="width: 100%" border="1">
                <tbody>
                    {% for k,v in data.items %}
                        {% if  v.0 == 0   %}
                        <tr>
                        {% endif %}
                            <td>{{ k }}:{{ v.1 }}</td>
                        {% if  v.0 == 0   %}
                        </tr>
                        {% endif %}
                    {% endfor %}
                </tbody>
                </table>
         

按照我的理解,如果v.0==0 自动加tr和tr的结束标签,正常人都会这么干吧,可是反复测试都得不到预期的结果。 最后发现只需要加tr标签就行, 结束标签django会自动去加的
改成下面的代码测试正常。

                <table style="width: 100%" border="1">
                <tbody>
                    {% for k,v in data.items %}
                        {% if  v.0 == 0   %}
                        <tr>
                        {% endif %}
                            <td>{{ k }}:{{ v.1 }}</td>
                    {% endfor %}
                </tbody>
                </table>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值