模板语言

django模板查找机制

  1. 先在settings指定的目录下查找,
  2. django\contrib\admin\templates
  3. django\contrib\auth\templates
  4. 然后去每个app下的templates中查找
  5. 找到即停止查找,否则Template Not Found

属性的访问

使用 "." 来访问变量的属性

当模板系统遇到 "." 的查询顺序

  1. 字典查询(Dictionary lookup)
  2. 属性或方法查询(Attribute or method lookup)
  3. 数字索引查询(Numeric index lookup)

过滤器

使用管道符号 (|)来应用过滤器,如{{ name|lower }}。将在变量 {{ name }} 使用 lower 过滤后再显示它的值

{{ value2|safe }}     将字符串标记为在输出之前不需要进一步的HTML转义
{{ list|join:", "}}   列表转字符串
{{ value|urlencode }} url编码
{{ value|first }}     列表第一个元素
{{ value|last }}      列表最后一个元素
{{ value|random }}    随机返回
{{ value|length }}    返回值的长度
{{ value|length_is:"4" }}       如果值的长度是4,则返回True
{{ value|linenumbers }}         显示带行号的文本
{{ value|default:"nothing" }}   如果 value没有被提供,或者为空, 上面的例子将显示“nothing”。
{{ value|filesizeformat }}      如果 value 是 123456789,输出将会是 117.7 MB。
{{ value4|date:‘Y-m-d‘ }}       转换时间格式
{{ value2|add:3 }}              value2+3 int类型
{{ value|capfirst }}            大写变量的第一个字母,django--> DjangoTemplates
{{ value|cut:"-" }}             删除字符串中的 "-"
{{ value|dictsort:"name" }}     接受一个字典列表,并返回按参数中给出的键排序后的列表。
      dictsortreversed 反序
{{ value|divisibleby:"3" }}     如果value可以被给出的参数整除,则返回 True
{{ value|truncatechars:9 }}        如果字符串字符多于指定的字符数量,那么会被截断

详情参考:http://python.usyiyi.cn/django/topics/class-based-views/index.html

自定义过滤器

文件结构

包含一个templatetags 目录,和models.py、views.py等文件处于同一级别目录下。

mysite/
├── blog
│   ├── __init__.py
│   ├── models.py
│   ├── templatetags
│   │   ├── blog_extras.py
│   │   └── __init__.py
│   └── views.py

在添加这个模块以后,在模板里使用标签或过滤器之前你将需要重启服务器。

定义filter

from django import template
register = template.Library()
@register.filter(is_safe=True)   # 只能接受两个参数
def filter_multi(var,bar):    # var是变量值, bar是选项值
    return  var * bar          

模板文件
<!DOCTYPE html>
{% load blog_extras %}     # 导入定义的.py文件
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>filter--->{{ x|filter_multi:20 }}</p>
</body>
</html>

自定义模板标签

from django import template
register = template.Library() 

@register.simple_tag          # 可以接受多个参数
def simple_tag_multi(v1,v2,v):
    return  v1 * v2 * v

调用方法与filter相同

inclusion标签

通过渲染另一个模板来显示数据

定义标签

# blog/templatetags/inclusion_tag.py
from django import template

register = template.Library()

@register.inclusion_tag(‘include.html‘)
def inc_test(xxx):
    value3 = [
        {"title":"aaa"},
        {"title":"bbb"},
        {"title":"ccc"}
    ]
    return {"value":value3}

用于渲染的模板

# include.html

<ul>
    {% for i in value %}
    <li>{{ i.title }}</li>
    {% endfor %}
</ul>

在父模板中载入

# base.html

{% load inclusion_tag %}
<h1>base</h1>
{% inc_test xxx %}

模板继承

模板继承可以创建一个基本的 “骨架” 模板

它包含站点中的全部元素

并且可以定义能够被子模版覆盖的block

当模板系统处理子模版时,首先定位父模板,并用子模版中的block替换掉父模板的block

使用方式

  1. 创建一个base.html控制整个站点的框架
  2. 站点的每个分支都创建一个父模板,最后继承Base.html
  3. 为每种页面类型创建独立的模板
{% block title %} {% endblock %}            # 父模板中定义
{% extends "base.html" %}                   # 子模版继承base.html
{% block titel %} <a>xxx</a> {% endblock %}  # 具体内容
{% include "public"}                         # 导入公共模板
{% include "public.html" with obj=uset_list}   # 传入上下文对象
时间: 06-16

模板语言的相关文章

Django模板语言小记

1.blog.views.py  # Create your views here. from django.template import loader,Context from django.http import HttpResponse from blog.models import BlogPost def archive(request):     posts = BlogPost.objects.all()     t = loader.get_template('archive.

Django学习之 - 基础模板语言

模板语言循环 1:如果模板语言遇到列表,直接进行循环取值即可. 2:如果模板语言遇到字典进行循环有以下3种: - for item in dict.keys 只循环获取字典key - for item in dict.value 只循环获取字典value - for k,v in dict.items 循环获取字典的key,value全部.实例url:fordict # 字典for循环的取值方法 1 userlist = { 2 '1': {'name': 'jack', 'age': 36},

请教THINKPHP的请教TP模板语言的if判断问题

请教THINKPHP的请教TP模板语言的if判断问题 代码如下<volist name="pageData" id="vo"><if condition="$pageNow eq $vo.index"><a class="active" href="/MyHouse/mylist?pageNow={$vo.index}">{$vo.index}</a><

HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改

效果: 上传组件非常的酷,但是分析其使用JS写法使用了模板语言的,代码如下: <script type="text/j-template" id="tpl_popbox_ImgPicker_listItem"> <# _.each(dataset,function(url){ #> <li> <span class="img-list-overlay"><i class="img-l

【Java模板语言】TinyTemplate 实战 &lt;一&gt;:Serlvet集成

Writer      :BYSocket(泥沙砖瓦浆木匠) 一.什么是TinyTemplate 什么是模板语言? 模板语言是为了使用户界面与业务数据(内容)分离而产生的,并能生成特定格式的文档. 什么是TinyTemplate?(开源项目地址入口) Tiny模板引擎是一个基于Java技术构建的模板引擎,它具有体量小.性能高和扩展易的特点. 适合于所有通过文本模板生成文本类型内容的场景,如:XML.源文件.HTML等等,可以说,它的出现就是为了替换Velocity模板引擎而来,因此在指令集上在尽

Django学习日记05_模板_模板语言

Variables 在模板中,使用两个大括号包含变量的方式来使用变量: {{ name }} 该变量应该作为键值对中的键,在Context中能被查找到. Tags 模板中使用Tags来进行简单的逻辑: {% commet %}? ? #body{% endcommet %} Django内置了大量的Tags: 1. if :使用if标签来实现分支逻辑 {%if option%}? ? #if body{%elif option2%}?? ? #elif body{%else%}?? ? #els

JS模板语言不错的脚本

<html> <script src="template.js"></script> <head> </head> <body> <div id="content"></div> </body> </html> <script id="test" type="text/html"> <h1&

【转】Velocity模板(VM)语言介绍

http://www.blogjava.net/caizh2009/archive/2010/08/20/329495.html Velocity是什么? Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人 员可以只关注页面的显

Django的模板系统

模板系统介绍 模板系统的组成:HTML代码和逻辑控制代码 逻辑控制代码可以理解是django模板语言 django的模板语言组成 变量(使用双大括号来引用变量): 标签(tag)的使用(使用大括号和百分比的组合来表示使用tag) 模板继承 模板语言之变量 语法: {{var_name}} var_name 指变量名 使用模板语言之前: 先介绍template对象和Context对象 进入django的项目的交互环境 python manange.py shell >>> from dja