Django之模板参数

今天写了一个模板,在视图函数中,将含有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="https://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="https://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:两个可以嵌套

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值