第一章(四):Django框架的模板(DTL):变量、标签、模板过滤器、模板继承、配置模板文件(staticfiles)
系列文章目录
备注:这里是Django系列文章的所有文章的目录
第一章(一) : Django框架如何创建项目、创建应用、创建templates;如何启动django项目;
第一章(二):Django框架的模式、路由、视图;
第一章(三):Django框架的视图函数、视图类的认识及常规使用;
Django框架(七):django之模板变量、Template类、Context类、深度变量查找、filter过滤、控制语句if、for循环
备注:欢迎查阅python之Django框架,如有疑问,欢迎评论,一定回复!!!
文章目录
- 系列文章目录
- 前言
- 一 . 模板变量
- 1.1 . 模板变量的类型
- 1.2 . 模板变量的应用:{{ 变量名 }}
- 1.2.1 . 变量使用实例
- 1.2.2 . 变量使用实例-效果释义
- 二 . 模板标签
- 2.1 . 常见标签
- 2.2.1 . for循环标签的`标签变量`
- 2.2.2 . 标签的使用:以for循环标签为例
- 2.2.3 . 2.2.2的效果释义
前言
提示:这里可以添加本文要记录的大概内容:
Django的模板包含:动态部分、静态部分。动态部分即是Django的模板语言DTL,静态部分即是HTML、CSS、JavaScript。
模板语言主要是:模板变量、模板标签、模板过滤器。
提示:以下是本篇文章正文内容,如有疑问,欢迎评论中指出,定在一周内予以回复。
一 . 模板变量
模板变量可以被看作是HTML文件中的占位符
。当Django模板引擎执行时,会用模板变量实际的值对其进行替换。
1.1 . 模板变量的类型
模板变量:字符串、列表、字典、类对象
1.2 . 模板变量的应用:{{ 变量名 }}
注意:变量名前后都有空格
,变量名可以由字母
、数字
和下划线
组成,但不能包含空格和其它字符
。
1.2.1 . 变量使用实例
app中views.py的视图函数:
def var(request):
'''
变量的使用
:param request:
:return:
'''
lists = ['java', 'python', 'C', 'C#', 'JavaScript']
dicts = {'姓名': "张三", "年龄": 25, "性别": '男'}
return render(request, 'var.html', {'lists': lists, 'dicts': dicts})
# return render(request, 'var.html', locals())
templates中,变量的引用:
<body>
{{ lists }}
<table border=1>
<tr>
<td>{{ lists.0 }}</td>
<td>{{ lists.1 }}</td>
<td>{{ lists.2 }}</td>
<td>{{ lists.3 }}</td>
<td>{{ lists.4 }}</td>
</tr>
</table>
<br>
{{ dicts }}
<table border=1>
<tr>
<td>{{ dicts.姓名 }}</td>
<td>{{ dicts.年龄 }}</td>
<td>{{ dicts.性别 }}</td>
</tr>
</table>
</body>
urls.py中,路由:
urlpatterns = [
path('var/', views.var, name='app3_var'),
]
1.2.2 . 变量使用实例-效果释义
- 1.2.1 中,视图函数中,render()所返回的数据的名称,一定是要和templates中{{ 变量名 }}一致;
- 当变量是list/dict/对象时,引用其内部值:{{ list.索引 }}、{{ dict.keys }}
- 访问路由,页面展示:
二 . 模板标签
模板标签的需要使用**标签限定符{% %}
**进行包裹。
标签的作用:载入代码渲染模板,或者对传入的参数进行逻辑判断和计算。
2.1 . 常见标签
模板标签 | 描述 |
---|---|
{% if %}{% elif %}{% else%}{% endif %} | 条件判断模板标签 |
{% for %} {% empty %} {% endfor %} | 循环模板标签 |
{% url %} | 路由配置的地址标签 |
{% extends xx%} | 模板继承标签,从xx模板继承 |
{% load %} | 加载相关内容 |
{% static %} | 静态资源 |
{% block %}{% endblock %} | 一组占位符标签,需要重写模板 |
{% csrf_token %} | 用来防护跨站点伪造攻击 |
{% include 页面 %} | 包含一个HTML页面 |
2.2.1 . for循环标签的标签变量
变量 | 描述 |
---|---|
forloop.counter0 | 表示当前循环的索引,从0开始计数 |
forloop.counter | 表示当前循环的索引,从1开始计数 |
forloop.revcounter0 | 表示循环中剩余元素的数量,在进行第1次循环时 forloop.revcounter0的值是循环的序列中元素总数减去1,最后一次时,为0 |
forloop.revcounter | 表示循环中剩余元素的数量,在进行第1次循环时 forloop.revcounter的值是循环的序列中元素总数,最后一次时,为1 |
forloop.first | 表示是否是第1次循环 |
forloop.last | 表示是否是最后1次循环 |
forloop.parentloop | 嵌套循环中,获取上层的for循环 |
2.2.2 . 标签的使用:以for循环标签为例
扩展:Django框架(七):django之模板之变量、Template类、Context类、深度变量查找、filter过滤、控制语句if、for循环
步骤一:在app3的views.py文件中,编写for_label函数
def for_label(request):
'''
标签的使用,以for循环为例
:param request:
:return:
'''
dict1 = {'书名': 'Django开发', '价格': 80, '作者': '张三'}
dict2 = {'书名': 'Python开发', '价格': 100, '作者': '李四'}
dict3 = {'书名': 'C#开发', '价格': 101, '作者': '王二'}
list1 = [dict1, dict2, dict3]
return render(request, 'for_label.html', {'lists': list1})
步骤二:在templates中,添加for_label.html,内容包含:
<table border="1">
{% for li in lists %}
{% if forloop.first %}<!--如果是第一条记录-->
<tr>
<td>第一条记录:{{ li.书名 }}</td>
</tr>
{% endif %}
<tr>
<td>当前值:{{ li.书名 }},价格:{{ li.价格 }},当前正序索引{{ forloop.counter0 }},
当前倒序索引{{ forloop.revcounter0 }}
</td>
</tr>
{% if forloop.last %}<!--如果是最后一条记录-->
<tr>
<td>最后一个值:{{ li.书名 }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
步骤三:在app3的路由url.py中,添加:
from django.urls import path, re_path
from app3 import views
urlpatterns = [
……
path('for_label/', views.for_label, name='app3_for_label'),
……
]
2.2.3 . 2.2.2的效果释义
提示:这里对文章进行总结: