把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end
旋转立方体
旋转立方体end

五、模板层

一、模板语法的书写格式

a. 变量相关

{{ }}

b. 逻辑相关

{% %}

二、模板语法的传值

1. 给html页面传值的两种方式

a. 指定值

return render(request, 'test.html', {'name': 'byx'})
        
b. locals(),传递当前名称空间中所有名字

return render(request, 'test.html', locals())

2. 值的数据类型

a. 支持所有python基本数据类型

b. 只要是能加括号调用的,html会自动加括号调用(函数、对象.方法)

c. 传函数名时,会展示函数返回值。

d. 直接传对象,显示的是对象的地址

三、模板语法的取值

模板语法取值统一采用句点符

1. 点名字

{{ user_dict.name }}

2. 点索引

{{ user_list.2 }}

3. 链式取值

{{ user_dict.info.detail_info.2 }}

4. 给数据起别名

别名只能在with内部使用

{{% with user_dict.info.detail_info.2 as asset %}}

{{ asset }}

{{% endwith %}}

四、模板语法之过滤器

1. 统计长度

无法统计默认返回0

统计长度:{{ s|length }}

2. 加法运算

数字相加或字符串拼接,不符合时返回空

加法运算:{{ n|add:10 }}


加法运算:{{ s|add:'byx' }}

3. 切片操作

顾头不顾尾

切片操作:{{ l|slice:'0:5:2' }}

4. 转成文件大小格式

文件大小:{{ file_size|filesizeformat }}

5. 截取文本内容

a. 按字符截取,截取17个字符加上‘...’

截取文本内容:{{ text|truncatechars:20 }}

b. 按空格截取文本

截取文本内容:{{ text|truncatewords:20 }}

6. 判断是否有值

有值展示值,没值展示默认值

判断是否有值:{{is_value|default:'没接收到值'}}

7. 展示带有标签的文本

a. 除非前后端转义,不会转成html标签

h = ''

展示带有标签的文本:{{ h }}

b. 前端转义

展示带有标签的文本:{{ h|safe }}

c. 后端转义

from django.utils.safestring import mark_safe

h = ''
h = mark_safe(h)

五、模板语法之标签

1. for循环

a. 基本语法

{% for foo in x %}

{{ forloop }}


{{ foo }}

{% endfor %}

b. forloop参数

forloop.first # 是否是第一个
forloop.last # 是否是最后一个
forloop.counter # 从1开始计数所在序号
forloop.counter0 # 从0开始计数所在序号

c. 当接收的对象为空时执行{% empty %}

{% empty %}
        

现在打印我这句话

2. if判断

基本语法

{% if s %}

s有值

{% else %}

s没有值

{% endif %}

3. for循环if判断结合示例

{% for foo in l %}

{% if forloop.first %}

这是第一条数据

{% if forloop.last %}

这是最后一条数据

{% else %}

{{ foo }}

{% endif %}

{% endfor %}

六、自定义过滤器、标签和inclusion_tag

1. 前置步骤

a. 在应用名下新建一个名字为templatetags的文件夹

b. 在该文件夹内,新建一个py文件

c. 在该py文件中写下下面代码

from django.template import Library

register = Library()

2. 自定义过滤器

只能有2个参数

a. py文件中编写

@register.filter(name='tag1')
def index(a, b):
return a + b

b. html页面中使用

{% load mytag %}..0

{{ 2|tag1:3 }}

p.s 自定义的过滤器可以在逻辑语句中使用,自定义标签不行

{% load mytag %}

{% if s %}

s有值

{% else %}

s没有值

{% endif %}

3. 自定义标签

能有多个参数,参数之间空格隔开

a. py文件中编写

@register.simple_tag(name='tag2')
def index(a, b, c, d):
return '%s%s%s%s' %(a, b, c, d)

b. html页面中使用

{% load mytag %}

4. 自定义inclusion_tag

将传入的参数传给第三方html页面渲染,显示到当前html页面。当你使用一些页面组件,并且该页面组件需要参数才能正常渲染时使用。

a. py文件中编写

@register.inclusion_tag('mytag.html', name='tag3')
def index(n):
l = []
for i in range(n):
l.append('第%s项' %i)
return locals()

b. 第三方html页面


    {% for foo in l %}
  • {{ foo }}

  • {% endfor %}

c. html页面

{% load mytag %}

七、模板的继承

1. 继承方法

a. 在原页面(home.html)上划定更改区域

{% block myContent %}

<div class="jumbotron"...>

{% endblock %}

b. 新页面

{% extends 'home.html' %}

{% block myContent %}

自己修改的内容

{% endblock %}

2. 可以用block.super沿用父类方法(可多次沿用)

{% extends 'home.html' %}

{% block myContent %}

{{ block.super }}

{% endblock %}

3. 通常一个模板页面包含三个区域:css区域、js区域和html区域。

八、模板的导入

1. 作用

将html页面当做模块直接导入使用

2. 代码

{% extends 'home.html' %}

{% block myContent %}

{{ block.super }}
{{ block.super }}

{% endblock %}

posted @ 2019-12-17 00:08  远翔、  阅读(137)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end