【Django】模板系统
目录
原文: http://106.13.73.98/__/35/ @ 一、变量在Django模版语言中按此语法使用:{{ 变量名 }} **当模版引擎遇到一个变量时,它将计算这个变量,然后用结果替换它本身. 点(.) 在模版语言中有特殊的含义,当模版系统遇到点时,它将以以下顺序查询:
注意事项:
简单示例: from django.shortcuts import HttpResponse,render,redirect def template_test(request): lst = ['a','b','c','d'] dct = { 'name': 'zyk','sex': 'boy','hobby': ['Python','Django','MySQL'] } class Person(object): def __init__(self,name,sex): self.name = name self.sex = sex def blogging(self): return '%s is blogging.' % self.name zyk = Person('zyk','boy') xhh = Person('xhh','girl') xmm = Person('xmm','girl') person_list = [zyk,xhh,xmm] return render( request,'template_test.html',{ 'lst': lst,'dct': dct,'person_list': person_list } ) 模版中可以这样写:
二、过滤器 Filters在Django模版语言中,通过使用 过滤器 来改变变量的显示. 语法:=={{ 变量|过滤方法:参数 }}== 注意事项:
如果一个变量的值为false或者为空,便会使用给定的默认值。否则,使用变量的值.
2. length返回值的长度,作用于字符串和列表. 3. filesizeformat将值格式化为一个"人类可读的"文件尺寸. 4. slice切片 5. add在值的末尾添加指定值,如果全部为数字,则相加. 6. first、last取第一个元素、取最后一个元素. 7. join使用字符串拼接列表. 8. truncatechars如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾(注意:"..."占3个字符). 9. truncatewords在一定数量的字后截断字符串. 10. date日期格式化 可格式化输出的字符 11. safeDjango的模版中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,是为了安全。 但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。 为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器(value|safe)的方式告诉Django这段代码是安全的不必转义。
12. cut移除所有与指定字符相同的字符串. 13. lower、upper、title、ljust、rjust、center依次为:全部小写、全部大写、标题化、左对齐、右对齐、居中. 14. 自定义filter自定义过滤器只是带有一个或两个参数的Python函数:
例如,在过滤器 {{ var|func:‘var‘ }} 中,过滤器func将传递变量var和参数‘bar‘. 自定义filter代码文件存放位置: 自定义filter文件写法如下: from django import template register = template.Library() @register.filter(name='addSB') def add_sb(value): return '%s is SB' % value 调用自定义filter: {# 先导入自定义的filter文件 #} {% load 文件名 %} {# 使用自定义的filter #} {{value|addSB }} 15. Tagsfor<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul> for循环可用的一些参数: for ... empty<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul> if ... else{% if user_list|length > 5 %} 七座豪华SUV {% else %} 黄包车 {% endif %} if ... elif ... else{% if user_list %} 用户人数:{{ user_list|length }} {% elif black_list %} 黑名单数:{{ black_list|length }} {% else %} 没有用户 {% endif %} ==if语句支持:and、or、==、>、<、!=、<=、>=、in、not in、is、is not判断.== {% if a > b > c %} ... {% endif %} with定义一个中间变量 {% with value as v %} {{ v }} {% endwith %} 16. csrf_token用于跨站点请求伪造保护. 三、母板示例(母板文件为:base.html,内容如下): <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Title</title> {% block page-css %} {% endblock %} </head> <body> <h1>这是母板的标题</h1> {% block page-main %} {% endblock %} <h1>母板底部内容</h1> {% block page-js %} {% endblock %} </body> </html> 注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。 模版继承示例(继承上例的母版): {% extends 'base.html' %} 块(block)通过在母版中使用 =={% block xxx %}== 来定义"块". 例如: {% block page-css %} ... {% endblock %} {# 这是母板的标题 #} {% block page-main %} ... {% endblock %} {# 母板底部内容 #} {% block page-js %} ... {% endblock %} 四、组件可以将常用的页面内容,如导航条、页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。 {% include "文件全名" %} 示例(在base.html文件中导入nav.html文件内的代码): 五、静态文件相关==从settings文件内获取 STATIC_URL=‘/static/‘ 和相对路径进行拼接.== {% load static %} <img src="{% static 'images/hi.jpg' %}" alt="Hi!"/> 引用JS文件时使用: {% <script src="{% static 'mytest.js' %}"></script> %} 如果某个文件多处被同时用到,可以存为一个变量: {% load static %} {% static 'images/hi.jpg' as myphoto %} <img src="{{ myphoto }}"><img> 示例(导入bootstrap文件): *** 使用get_static_prefix==从settings文件内获取 STATIC_URL=‘/static/‘ 和相对路径进行拼接.== {% load static %} <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" /> # 或者 {% load static %} {% get_static_prefix as STATIC_PREFIX %} <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" /> <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" /> 示例(导入bootstrap文件): 自定义simpletag_tag略 自定义inclusion_tag1.在app下创建一个名为 ==tmplatetags== 的python package包. 原文: http://106.13.73.98/__/35/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |