Python编程+Django框架web网站开发(4)
目录
一、for循环批量输出
回顾:输出普通变量的时候使用{{}}符号
下面采用的是{% %},这个符号的使用一般都是针对有逻辑性质的语句,也可以说是多行输出的时候,需要这个符号来配合。
使用格式:
<ul>
{% for list in list1 %}
<li>{{ list.title}}</li>
{% endfor%}
</ul>
- views.py中的函数编写
def download(request):
# # 第一种传值方式
downloading="软件下载地址"
# list1 = [{'title': "Who am I?我是谁", "date": "2024-02-28"},
# {'title': "Who are you?你是谁", "date": "2024-02-29"}]\
list1 = []
return render(request, "index.html", context={"downloading": downloading, "list1": list1})
- 针对空数据时候的显示方式
使用empty的方式, 这个方式在for语句内部的。
使用格式:
{% for list in list1 %}
这是有数据的时候
{% empty %}
这里是没数据的时候
{% endfor%}
二、if语句分门别类输出
- 将后台的数据通过模板页的if语句实现分门别类输出
def download(request):
# # 第一种传值方式
downloading="软件下载地址"
list1 = [{'title': "Who am I?我是谁", "author":"Yeraphael" , "date": "2024-02-28"},
{'title': "Who are you?你是谁", "author":"Kiven" , "date": "2024-02-29"},
{'title': "Who?我是谁", "author":"Milan" , "date": "2024-01-28"},
{'title': "Where?你是谁", "author":"Bosion" , "date": "2024-01-29"}]
return render(request, "index.html", context={"downloading": downloading, "list1": list1})
<ul>
{% for list in list1 %}
{% if list.author == "Yeraphael" %}
<li style="color: darkorange">{{ list.title}} {{ list.author}} {{ list.date}}</li>
{% elif list.author == "Kiven" %}
<li style="color: crimson">{{ list.title}} {{ list.author}} {{ list.date}}</li>
{% elif list.author == "Milan" %}
<li style="color: aquamarine">{{ list.title}} {{ list.author}} {{ list.date}}</li>
{% else %}
<li style="color: greenyellow">{{ list.title}} {{ list.author}} {{ list.date}}</li>
{% endif %}
{% empty %}
<li>暂时还没有文章</li>
{% endfor%}
</ul>
注意: if条件中判断的符号主要两边都要留有空格,否则会无法解析识别。
三、自定义日期格式化输出
-
{{ list.date|date:‘Y年m月s日 h时i分s秒’}}
注意:如果写成这种形式,那此时变量类型必须是Python中的日期时间类型。
<li style="color: darkorange">{{ list.title}} {{ list.author}} {{ list.date|date:'Y年m月s日 h时i分s秒'}}</li>
- 解决后台字符串日期格式化输出问题
需要先导入datetime库 因为需要strptime函数
strptime(需要格式化的日期时间的字符串,字符串的格式描述)
list1 = [{'title': "Who am I?我是谁", "author":"Yeraphael" , "date": datetime.strptime("2024-02-28 10:23:52", "%Y-%m-%d %H:%M:%S")},
{'title': "Who are you?你是谁", "author":"Kiven" , "date": datetime.strptime("2024-02-29 11:24:42", "%Y-%m-%d %H:%M:%S")},
{'title': "Who?我是谁", "author":"Milan" , "date": datetime.strptime("2024-01-23 07:04:34", "%Y-%m-%d %H:%M:%S")},
{'title': "Where?你是谁", "author":"Bosion" , "date": datetime.strptime("2024-01-29 09:43:12", "%Y-%m-%d %H:%M:%S")}]
四、字母大小写转换
upper lower title函数的使用,这些函数都属于变量过滤器
这几个函数都是在templates模板中使用
{{ list.title|upper}}
五、源代码格式化对齐方式
ljust rjust center 注意:针对的是源代码中的字符串对齐方式
html中的源代码连续空格只会在前台显示一个,真正的空格是代码** **
<h6 style="color: green">{{ list1.0.title|rjust:"600"}}</h6>
注意还有一点是当在模板里面访问列表里面的元素时,要使用实心点的形式
六、截取元素或字符串的方法
first:显示第一个元素
last: 显示最后一个元素
{{ list1.0.title|last}}
slice: 截取指定的一批元素。格式类似python编程中的切片。
如果是列表在,针对的时列表中索引的元素。如果是字符串,针对的是每一个字符。
七、模板中的切割和简化显示
三个过滤器join、truncatewords、truncatechars的用法
这里的使用格式,如果是数字,这个数字代表显示的字符长度,这个数字可以加"" 也可以不加
{{ list1.0.title|truncatechars:11}}
注意配置中文字符的省略输出前,一定要注意框架的语言配置为英文en-us。
八、add过滤器的三种用法
过滤器使用格式:
{{ 变量|add: “参数”}}
-
算数加法场景
这里的参数是一个数字类型
注意后台输出的变量是数字的数值型还是字符串型,都可以实现加法。 -
字符串拼接场景
这里是一个字符串的话,会在原变量的基础上拼接。
{{ list1|add:"你好"}}
- 列表元素增加场景
{{ list1|add:L}}
九、自定义过滤器
掌握过滤器文件结构和配置
在项目应用程序文件夹内创建templatetags文件夹,这个文件夹就是用来创建各种各样的自定义的过滤器。
注意: 提前查看创建的应用程序是否添加到项目中。
在settings.py文件内的INSTALLED_APPS内配置当前应用程序的名字
自定义过滤器方法的定义
在过滤器文件夹内创建自定义的过滤器文件myfiler.py
自定义过滤器的思路:
- 导入模板库 template
- 实例化一个register模板注册器,要注册过滤器
- 用一个函数表示过滤器的功能
过滤器格式
@register.filter
def 函数名(template传过来的变量, 过滤器传递参数1,过滤器传递参数2):
过滤器内部处理
from django import template
register=template.Library()
@register.filter
def myFilterMGW(value, arg1):
mystr1=str(value)
if mystr1.find("敏感词")>=0:
return mystr1.replace("敏感词", arg1)
else:
return value
过滤器功能的引入和使用
Template模板页中引入自定义过滤器模块。
在html中开头引入
{% load myfiler %}
使用是与之前使用框架自带的过滤器方法一样
{{list.title|myFilterMGW:"你好啊"}}