python的Web框架,Django模板标签及模板的继承

时间:2024-03-31 19:36:50

模板标签

在传递数据的时候,会有大量的数据展示在浏览器上,而数据会是动态变化的,在html的编写中,数据也是需要动态的,而不能是写死的,如果动态展示呢。

给定的例子数据

views传递数据给html

 from django.shortcuts import render

     def index(request):

         students = [
{'id':12, 'name':'张三', 'age':19, 'sex':'男'}
{'id':22, 'name':'李思', 'age':19, 'sex':'女'}
{'id':25, 'name':'王五', 'age':19, 'sex':'男'}
{'id':43, 'name':'赵柳', 'age':19, 'sex':'女'}
{'id':88, 'name':'孙奇', 'age':19, 'sex':'男'}
] return render(request,'teacher/index.html',context={
'students':students,
})
for循环标签
    <body>
<table>
<tr>
<th>序列</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr> <!--#for循环写在{% %} 内-->
{% for stu in students %}
<tr>
<!--#把循环迭代的数据,用可以取出值即可-->
<td>{{ stu.id}}</td>
<td>{{ stu.name }}</td>
<td>{{ stu.age }}</td>
<td>{{ stu.sex }}</td>
</tr>
<!--#结尾需要end-->
{% endfor %}
</table>
</body>

输出的结果为: css样式有过调整,请忽略样式

python的Web框架,Django模板标签及模板的继承

forloop:序号排列
 <body>
<table>
<tr>
<th>从1开始的正向排序</th>
<th>从0开始的正向排序</th>
<th>以1结尾的倒序</th>
<th>以0结尾的倒序</th>
</tr>
{% for stu in students %}
<tr>
<!--序号排列各式样式-->
<td>{{ forloop.counter}}</td>
<td>{{ forloop.counter0 }}</td>
<td>{{ forloop.revcounter }}</td>
<td>{{ forloop.revcounter0 }}</td>
</tr>
{% endfor %}
</table>
</body>

输出的结果为:

python的Web框架,Django模板标签及模板的继承

if:if判断
 <body>
<table>
<tr>
<th>从1开始的正向排序</th>
<th>从0开始的正向排序</th>
<th>以1结尾的倒序</th>
<th>以0结尾的倒序</th>
</tr>
{% for stu in students %} <!--if判断和for循环一样,也有结尾的endif,条件写在中间。-->
== 两头需要空格
<tr {% if stu.sex == '女' %}style="color:red"{% endif %}>
<td>{{ forloop.counter}}</td>
<td>{{ stu.name }}</td>
<td>{{ stu.age }}</td>
<td>{{ stu.sex }}</td>
</tr>
{% endfor %}
</table>
</body>

输出结果为:

python的Web框架,Django模板标签及模板的继承

简单获取url

views简单配置点击id所展示的页面

     def st_id(request, pk):
return HttpResponse('学生ID为%s的详情页' % pk)

对序号设置点击的跳转url

  <body>
<table>
<tr>
<th>从1开始的正向排序</th>
<th>从0开始的正向排序</th>
<th>以1结尾的倒序</th>
<th>以0结尾的倒序</th>
</tr>
{% for stu in students %}
<tr {% if stu.sex == '女' %}style="color:red"{% endif %}> <!--因为要点击url,所有把标签放在a标签内,在路径的配置上,写上路径然后把字典中的id做动态匹配就会得到需要的id。-->
<td><a href="/teacher/st_id/{{ stu.id }}">{{ forloop.counter}}</a></td>
<td>{{ stu.name }}</td>
<td>{{ stu.age }}</td>
<td>{{ stu.sex }}</td>
</tr>
{% endfor %}
</table>
</body>

输出结果:

python的Web框架,Django模板标签及模板的继承

点击序列为1的网址显示:

python的Web框架,Django模板标签及模板的继承

url标签:动态获取url,返回一个命名(views中path里面的name的值)了的URL的绝对路径
 <body>
<table>
<tr>
<th>从1开始的正向排序</th>
<th>从0开始的正向排序</th>
<th>以1结尾的倒序</th>
<th>以0结尾的倒序</th>
</tr>
{% for stu in students %}
<tr {% if stu.sex == '女' %}style="color:red"{% endif %}> 通过url标签,动态生成对应的url网址,此处的'teacher:st_id'
**需要在views中配置其中的path的name,name和此处的value需要一一对应。**
<td><a href="{% url 'teacher:st_id' stu.id %}">{{ forloop.counter}}</a></td>
<td>{{ stu.name }}</td>
<td>{{ stu.age }}</td>
<td>{{ stu.sex }}</td>
</tr>
{% endfor %}
</table>
</body>
for in empty 判断空置渲染默认的
 {% for i in stu%}
<!--#如果for循环的渲染失败,则渲染empty内的条件-->
{% empty %}
<!--渲染方法--> {% emdfor %}
with:类似于as

第一种写法:

 {% with stu=students.2%}
stu就可以拿出来使用了
{% endwith %}

第二种写法

 {% with test_name as tn %}
1111{{ tn }}
2222{{ tn }}
{% endwith %}
autoescape 转义开关 同过滤器的safe
 {% autoescape off %}
{{ html }}
{% endautoescape %}

模板的引入

include 模板的引入,把写好的html模板添加到我们需要的html中,在html代码中添加

 <div>
{% include 'teacher/ad.html' %}
</div>

输出结果

python的Web框架,Django模板标签及模板的继承


模板的继承

extends继承标签:extends代买写在html的最上面,首行,在此行下面的代码无效。

被引入的内容写在block中

     <!--在html中继承模板文件-->
{% extends 'teacher/base.html'%}
block自定义标签:在模板html中挖坑

base模板文件.html

  默认写css的坑
{% block link%}
{% endblock %} <!--默认写body的地方-->
{% block conrent(自定义名称) %} <!--如果被引入的html,如果没有写这个标签,就默认展示模板内的数据,如果有,就展示当前html的内容数据。-->
<p>模板内的数据</p>
{% endblock %} <!--默认底部定义写js的坑-->
{% block domready %}
{% endblock %}

被引入的html文件,css,js,html代码都是此种方法写入。对应上面的模板

 {% extends 'teacher/base.html'%}
{% load static %} {% block link %}
带入css代码
<link rel="stylesheet" href="{% static 'teacher/css/login.css' %}">
{% endblock %} {% block conrent %}
<p>我是被展示的数据</p>
{% endblock %} {% block domready %}
<script>JS代码</script>
{% endblock %}

总结:

模板标签语法:
     {% tag %} {% endtag %} 需要结束收尾的

     {% tag 参数 参数 %} 例如 url