django如何传递参数给template对象的?html
没错,就是经过views.py的函数传递,例如 render(request,'xxx.html',{'xx':'oo'}),还有其余的方式吗?其实还有url的方式传递参数,这里再也不赘述django
今天,咱们讲解一下template对象,如何与py进行交互,这里的py是指单独的py文件,而不是基于django的py文件app
首先,咱们在app01文件夹下建立一个templatetags目录,而后在建立xxoo.pyide
from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def simple_01(): return 'Python'
而后模板文件index.html函数
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div> {% simple_01 %} </div>
</body>
</html>
注意:自定义simple_tag的4个注意事项url
一、在模版文件中 {% load py文件 %}
spa
二、settings.py文件中,注册app,本文自建立app01,因此在INSTALLED_APPS = ['app01']
3d
三、在app01目录下建立目录templatetags,注意必须在app01目录下
code
四、建立template对象时,变量名固定,必须register,必须为register,必须为register
htm
五、必须重启服务
接下来神奇的事情发生了
在以前基础上,咱们加上参数
from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def simple_02(a,b): return a + b
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div> {% simple_02 1 2 %} </div>
</body>
</html>
from django import template from django.utils.safestring import mark_safe register = template.Library() @register.filter def simple_03(a,b): return a +'-'+ b
{% load xxoo %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> {{ '张杰'|simple_03:'谢娜' }} </div> </body> </html>
优势:能够传多个参数
缺点:不能做为if语句的条件
优势:能够做为if语句的条件
缺点:参数最多只能传2个,并且不能有空格,其余的只能经过字符串拼接,而后在分割