django的模板语言
目录
1、变量
{{变量}}
1、传入前端的变量最外层一定是一个字典
2、具体的变量可以是 字符串、列表、字典等类型
3、变量通过.方法可以调用自己的无参数方法、索引
4、如果变量是字典也可以通过.键调用值
可以自己写入代码,试着看一下变量的显示效果
首先,打开django目录下的views.py文件
然后代码如下
from django.http import HttpResponse
import time
from django.template import Template, Context
def variable(request):
tem = Template(
"""
<p>
变量常规用法:{{var}}
</p>
<p>
变量列表:{{var1}}
</p>
<p>
索引获取列表直接在列表后面加小数点索引:{{var1.1}}
</p>
<p>
变量的样式:{{var.upper}}
</p>
<p>
变量字典:{{var2}}
</p>
<p>
变量字典取值直接在字典后面加小数点键名:{{var2.age}}
</p>
"""
)
data = Context({
"var": "lee",
"var1": [1, 2, 3, 4],
"var2": {"name": "张三", "age": 18}
})
result = tem.render(data)
return HttpResponse(result)
然后打开urls.py文件
先导入views文件,然后在这个文件里的urlpatterns列表中添加
path('var/',variable),
其中var/的意思是识别地址栏为var时,调用variable
然后开启服务器,在浏览器的地址栏中输入
就可以看到刚刚在views里内容的显示效果了
2、标签
{% if %}
1、判断指定条件true或者false,通常判断一个变量是否存在或者为真
2、{% if %} 标签需要 {% endif %} 标签进行闭合
3、{% if %} 可以有 {% else %}
在views文件中, 增加以下代码
def label_if(request):
"""
1、判断指定条件true或者false,通常判断一个变量是否存在或者为真
2、{% if %} 标签需要 {% endif %} 标签进行闭合
3、{% if %} 可以有 {% else %}
"""
tem = Template(
"""
{% if name %}
<p>欢迎登陆 {{name}}</p>
{% else %}
<p>
<a href='#'>
请登录
</a>
</p>
{% endif %}
"""
)
data = Context({
"name": "hhh",
})
result = tem.render(data)
return HttpResponse(result)
然后在urls文件中也更新相关内容
path('if/',label_if),
打开浏览器,输入地址,就可以看到效果了
如果我们在views文件中if判断为假,则不生效
{% ifequal %}
1、判断两个量是否相等,通常用于比较
2、{% ifequal %} 标签需要 {% endifequal %} 标签进行闭合
3、{% ifequal %} 可以有 {% else %}
在views文件中添加以下代码
def label_ifequal(request):
tem = Template(
"""
{% ifequal gender "M" %}
<p>欢迎登陆 {{name}} 先生 </p>
{% else %}
<p>欢迎登陆 {{name}} 女士 </p>
{% endifequal %}
"""
)
data = Context({
"name": "lee",
"gender": "M",
})
result = tem.render(data)
return HttpResponse(result)
同时在urls文件中更新
path('ifequal/',label_ifequal),
打开浏览器,输入地址,就可以看到效果了
如果ifequal匹配的结果为假,则是另一个效果
{% for %}
1、{% for %} 标签需要 {% endfor %} 标签进行闭合
2、{% for %} 标签采用了和python一样的for in结构。
3、{% for %} 循环出来的不是html对象只是数据
views
def label_for(request):
tem = Template(
"""
<table>
{% for i in nums %}
<tr>
{% for j in nums %}
{% if j <= i %}
<td style="padding-right: 20px;">
{{ j }} * {{ i }} = {% widthratio i 1 j %}
</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>
"""
)
data = Context({
"nums": range(1,10),
})
result = tem.render(data)
return HttpResponse(result)
urls
path('for/',label_for),
显示效果如下
{{ forloop }}
1、forloop是django模板语言定义好的一个变量,用来表示循环当中的每次循环
2、Forloop为嵌套循环提供了parentloop参数来记录当前循环的上一层循环的情况
3、通常我们使用forloop标签进行循环的开头或者末尾判断
views
def label_forloop(request):
tem = Template(
"""
<ul>
{% for i in num %}
<p>===============</p>
<h3>大循环!</h3>
{{ forloop }}
<p>===============</p>
{% for title in nums %}
{{ forloop }}
<li>
{{ title }} 是第{{ forloop.counter }}次循环,他的父循环是第{{ forloop.parentloop.counter }}次循环
</li>
{% endfor %}
{% if not forloop.last %}
<p>-------------------------------------</p>
{% endif %}
{% endfor %}
"""
)
data = Context({
"nums": "abcde",
"num": "123"
})
result = tem.render(data)
return HttpResponse(result)
urls
path('forloop/',label_forloop),
效果如下
3、过滤器
对变量进行具体功能的处理
{{ | }}
views
def filter(request):
templat = Template(
"""
{{ argv | upper }}
"""
)
context = Context({
"argv": "dadfqtoifvsdflkgh"
})
result = templat.render(context)
return HttpResponse(result)
path('filter/',filter),
显示效果如下