django 之 模版

模板:
	模版的创建过程:对于模版,其实就是读取模版(其中嵌套着模版标签),
	然后将 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>
总结:母板和组件的好处:减少代码复用!提高效率!

 

posted @ 2017-07-01 23:17  细雨蓝枫  阅读(142)  评论(0编辑  收藏  举报