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:"你好啊"}}