Django之模板参数

来源:互联网 发布:淘宝店怎么关 编辑:程序博客网 时间:2024/05/16 06:24

今天写了一个模板,在视图函数中,将含有html标记的内容传入模板,结果网页内容并没有将html的标记解析,而是原样输入。以为是自己写的有问题,于是换了一种写法,结果和原来一样。第一次代码如下:

视图函数:

def test(request):   tem=Template('<html><body>{{content}}<body></html>')   format='''<table border='1'>             <tr>   <td>name</td> </tr> </table>'''     html=tem.render(Context({'content':format}))   return HttpResponse(html)

</pre><p><span style="font-size:24px;">结果:</span></p><p><img src="http://img.blog.csdn.net/20140809161448259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTg0MTU3Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /></p><p></p><p><span style="font-size:24px">预期结果:</span></p><p><span style="font-size:24px"><img src="http://img.blog.csdn.net/20140809161353425?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTg0MTU3Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /></span></p><p></p><p><span style="font-size:24px">所以一般不要在模板变量中写入html的内容,确实需要一些逻辑的表达,最好使用模板标记。出现上述现象的原因是因为,django处于安全考虑,对模板参数的内容进行了转义,若要在模板中加入html标签,则只需在模板变量后加上过滤器或一些特殊的模板标签即可(参见django book之高级模板用法),如下:</span></p><p></p><p></p><p><span style="font-size:24px">①:用safe过滤器为单独的变量关闭自动转意:</span></p><p><span style="font-size:24px">      改正后的代码注意content的变化:</span></p><p><span style="font-size:24px">    </span><pre name="code" class="python">def test(request):   tem=Template('<html><body>{{content|safe}<body></html>')   format='''<table border='1'>               <tr>          <td>name</td></tr>  </table>'''     html=tem.render(Context({'content':format}))   return HttpResponse(html)
②使用模板标签来设置一整块模板的自动转意:

#关闭自动转意

{% autoescape off%}

.......

{% endautoescape %}


#打开自动转意

{% autoescape on%}

.......

{% endautoescape %}

PS:两个可以嵌套

如果大家还有更好的办法(自定义模板可能可以,不过暂时没有看到那里),请不吝赐教。

0 0
原创粉丝点击