模板:
模版的创建过程:对于模版,其实就是读取模版(其中嵌套着模版标签),
然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。
- 基本使用:
(注意:对于列表或是字典,获取其中的元素是用.的方式!!!
前端没有索引这个概念用于去取值,但前端支持点的方法去获取。
例如:一个字典 dic = {"k1":v1} ====> dic.k1获取值 v1)
一个列表 l = ["a","sss","swq"] ====> l.0 获取值 "a")
获取单值:{{k1}}
获取列表中的某个值:{{k2.索引值}}
获取所有单值:循环方式:
{% for item in k3 %}
{{item.k1}}
……
{% endfor %}
若是有条件判断:{% if 条件 %} 语句 {% else %} 语句 {% endif %}
- 母版
**-》母板页面《-**
- 母板占位符:{% block 自定义名称 %}{% endblock %}
-子板
页面继承:在子页面起始位置:{% extends "母板页面名称" %}
子板占位填充:{% block 自定义名称 %} 填充代码 {% endblock %}
- 导入小组件
(在页面需要的位置): {% include "组件页面名称" %}
- 示例:
pub.html #用来定制组件页面
<div>
<h3>特别漂亮的组件</h3>
<div class="title">标题:{{ name }}</div>
<div class="content">内容:{{ name }}</div>
</div>
test.html #导入组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
{% include 'pub.html' %}
{% include 'pub.html' %}
{% include 'pub.html' %}
</body>
</html>
- 函数 模版页面会自动执行
视图函数传给页面一个可执行对象,该对象可以在页面上直接点.操作方法名,(不需要在之后加括号,也就意味着不能传参数)执行其下的某个方法。
如果在方法之后没有加上safe,django会把这个操作判定为不安全的,就不会去执行,在之后加上|safe,就能让页面渲染出想要的效果。
例如:视图函数传回个对象s(s下有个显示当前页的方法.show()),在页面上显示当前页面 ----> {{ s.show|safe}}
- 模板自定义函数:
在模版中,有很多内置的函数方法供我们使用,例如:{% XXX|safe %},或是{% url "别名" %}
当这些自带的方法不能满足我们日常开发需求的时候,我们就需要自定制方法!
- 自定制方法步骤:
a、在settings.py文件中先注册app,不然django无法找到自定义的simple_tag。自定义的功能就不能使用!
b、在app中创建templatetags模块(创建一个文件夹为templatetags的文件)
c、在该模块下创建任意 .py 文件,如:xx.py
d、在文件中写代码,有几个注意点,如下:
1、模块及创建的对象是固定写法,不能更改!
2、必须以装饰器的形式,把框架的方法加载到自定义函数上(框架自己就是这样写的内置函数,参考内置函数)!
- simple_filter
- 最多两个参数,方式: {{第一个参数|函数名称:"第二个参数"}}
- 可以做条件判断
- simple_tag
- 无限制: {% 函数名 参数 参数%}
3、自定义的函数,最好是模版传参,在函数内部做条件判断
(后台是python写的可控,如果在页面判断的话,不知道怎么弄)把结果返回给页面。
4、函数必须有返回值,页面才能收到!
- 示例:
templatetags文件下temp.py文件
#以下全是固定写法!
from django import template #导入模块
register = template.Library() #固定写法,
@register.filter #以装饰器的形式,把方法加载到自定义的函数上
def my_upper(value):
return value.upper()
@register.filter
def my_info(value,arg):
return value+arg
@register.simple_tag
def my_size(value,a1,a2):
return value+a1+a2
test.html 测试页面
{% load temp %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>自定义方法测试</h3>
<p>{{ name|my_upper }}</p>
<p>{{ name|my_info:"666" }}</p>
<p>{% my_size "alex" "x" "o" %}</p>
</body>
</html>
总结:母板和组件的好处:减少代码复用!提高效率!