Template 模板

MVC   MTV

MVC

  • M models(和数据库进行交互)
  • V view(视图 展示数据 html文件)
  • C controller(控制器 调度)

MTV

  • M models(orm)
  • T template(模板 渲染 html文件)
  • V view(视图 函数,业务逻辑)

变量

在模板中使用变量,通常使用 . 的形式进行调用

{{ 列表.0 }}       索引

{{ 字典.‘键‘ }}

{{ 字典.keys }}

{{ 字典.values}}

{{ 字典.items}}

{{ 对象.属性}}

{{ 对象.方法}}       只能调用没有参数的方法

优先级:

1.字典的key

2.属性或者方法

3.数字索引

filter  过滤器

官方文档 : https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#ref-templates-builtins-filters

default 默认值

{{ value|default:"nothing"}}   变量不存在或者值为空时,显示默认值

filesizeformat 文件尺寸

(例如 ‘13 KB‘, ‘4.1 MB‘, ‘102 bytes‘, 等等)

{{ value|filesizeformat }}

add 加

数字加减(负数)

字符串拼接

列表拼接

{{ value|add:"2" }}

首先尝试将两个值强制转换为整数,如果失败,它将尝试将值一起添加到一起。这将适用于某些数据类型(字符串,列表等),而对其他数据类型则失败。如果失

败,结果将为空字符串。可以强制转换为整数的字符串将被求和

lower 小写

{{ value|lower }}

upper 大写

{{ value|upper}}

title 标题

首字母大写

{{ value|title }}

ljust 左对齐

{{ value|ljust:"10" }}

rjust 右对齐

{{ value|rjust:"10" }}

center 居中

页面显示时会将空格折叠,所以在显示时可能看不到居中的效果

{{ value|center:"15" }}

length 长度

{{ value|length }}

返回value的长度,如 value=[‘a‘, ‘b‘, ‘c‘, ‘d‘]的话,就显示4.

slice 切片  

{{value|slice:"2:-1"}}

first

取第一个元素

{{ value|first }}

last

取最后一个元素

{{ value|last }}

join 拼接

同python的str.join(list)

{{ value|join:" // " }}

truncatechars 截断

如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。需要注意的是,省略号也会被计算进截断的字符数中

{{ value|truncatechars:9}}     参数:截断的字符数

date 日期格式化

{{ value|date:"Y-m-d H:i:s"}}      html中的格式与python中不同

可格式化输出的字符:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#date

safe 安全

Django会出于安全,对HTML标签和JS等语法标签进行自动转义,显示字符串形式。但是有的时候我们可能不希望这些HTML元素被转义,可以通过过滤器“|safe”的

方式告诉Django这段代码是安全的不必转义。

value = ‘<a href = "www.baidu.com"></a>‘

{{ value|safe}}

自定义filter

1.在app下创建一个名为templatetags的包 # templatetags为固定写法,不能变

2.在包内创建py文件 (例:my_tags.py)

3.在py文件中:

from django import template

register = template.Library()     #  register固定写法 不能变

4.写函数+装饰器

@register.filter
def add_str(value, arg=None):        # 函数名就是过滤器的名字  value是变量  arg是给变量添加额外的参数,可以不写
    ret = ‘{}__{} ‘.format(value, arg)
    print(ret)
    return ret

5.在模板中使用自定义过滤器

{% load my_tags %}             # 导入文件

{{ ‘alex‘|add_str:‘sb‘ }}

标签

 for循环

{%  for  i in  name_list %}
    {{ forloop }}
{% empty %}          # 当没有数据时
    没有数据
{% endfor %}

forloop

forloop.counter           当前循环的索引值(从1开始)
forloop.counter0          当前循环的索引值(从0开始)
forloop.revcounter        当前循环的倒序索引值(到1结束)
forloop.revcounter        当前循环的倒序索引值(到0结束)
forloop.first             判断当前循环是不是第一次循环
forloop.last              判断当前循环是不是最后一次循环
forloop.parentloop        本次循环的外层循环

if判断

{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}

if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断

不支持算数运算,但是可以使用add等内置过滤器等方法实现

不支持连续判断,和python不同 例: 10 > 5 > 1 结果为false

with

定义一个中间变量

{% with total=business.employees.count %}       将数据赋值给中间变量total
    {{ total }} employee{{ total|pluralize }}   直接使用total写逻辑
{% endwith %}

母版和继承

母版:

将多个页面共同的html代码提取出来,生成一个新的html文件

可以在文件中定义一些block块,让子页面重新覆盖     {% block 名称 %} {% endblock %}

继承:

在写具体的模板时,继承母版中的代码 {% extends ‘html文件名称‘ %}

重写block块

{% block 名称 %}

  ‘内容‘

{% endblock %}

注意:

  1. {% extends ‘html文件名称‘ %} 写在最开始,前面不要有内容
  2. {% extends ‘html文件名称‘ %} 文件名字要带引号,不然会被当做变量名称去查找
  3. 要在页面显示的内容放在block块中,写在其他部分不会显示
  4. 如果模板中定义了多个block块 一般写css js

组件

把文件中共同的一段代码封装在一个html文件中(代码固定写死,不灵活)

使用: {% include ‘文件名称’ %}

静态文件

如果在项目开发过程中,修改了settings文件中静态文件的别名,需要把所有文件当中的引用全部修改,可以使用相关的方法,动态获取静态文件的别名.

{% load static %}         获取静态文件名称,在括号内补全路径

<link rel="stylesheet" href="{% static ‘plugins/bootstrap-3.3.7/css/bootstrap.css‘ %}"

{% get_static_prefix %}    获取静态文件的别名   在括号外补全路径

<link rel="stylesheet" href="{% get_static_prefix %}plugins/bootstrap-3.3.7/css/bootstrap.css">

自定义simple_tag

自定义filter最多只能有两个参数,变量和参数,有一定局限

自定义simple_tag和自定义filter类似,但是接收更灵活的参数

流程与自定义filter大致一样

写函数+装饰器

@register.simple_tag
def join_str(*args,**kwargs):          接收的参数无限制,使用万能形参
    return ‘+‘.join(args), ‘*‘.join(kwargs.values())

在模板中使用

{% load my_tags %}

{% join_str ‘alex‘ ‘wusir‘ k1=‘taibai‘ k2=‘baoge‘ %}    各参数以空格分隔

自定义inclusion_tag

返回html代码片段

例:分页功能

写函数+装饰器

@register.inclusion_tag(‘pagination.html‘)           # 需要写返回的html文件名字

def pagination(num,now):
    return {‘num‘:range(1,num+1),‘now‘:now}          # 以字典形式返回 num是数字数字不可迭代,返回值时需要处理一下

写pagination.html文件

<nav aria-label="Page navigation">
    <ul class="pagination">
        <li>
            <a href="#" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
        </li>
        {% for i in num %}
            {% if i == now %}           {# 将当前页面设置成选中状态 #}
                <li class="active" ><a href="#">{{ i }}</a></li>
            {% else %}
                <li><a href="#">{{ i }}</a></li>
            {% endif %}
        {% endfor %}
        <li>
            <a href="#" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
            </a>
        </li>
    </ul>
</nav>

在模板中使用

{% load my_tags %}

{% pagination 5 3 %}

原文地址:https://www.cnblogs.com/sandy-123/p/10657154.html

时间: 2024-10-13 14:12:32

Template 模板的相关文章

ansible的playbook配置及template模板的使用

前言: 学习下ansible的playbooks的状态配置管理,说来puppet saltstack都有类似的叫法,只是ansible的叫法更犀利,我当时一看playbook还以为是花花公子的playboy.要使用ansible就要深入学习playbook配置及模板. 注:到底是playbook还是playbooks.... 先把官网的简单几个语法给说明下. #这个是你选择的主机 - hosts: webservers #这个是变量   vars:     http_port: 80     m

ArcGIS API for Silverlight代码中使用Template模板

原文:ArcGIS API for Silverlight代码中使用Template模板 在项目开发中,会遇到点选中聚焦闪烁效果,但是因为在使用Symbol的时候,会设置一定的OffSetX和OffSetY,所以聚焦闪烁的时候,有些情况下,会出现闪烁点的位置和Symbol的位置不重叠现象,下面的方法就是解决这个问题的. 1.在Silverlight项目中新建一个文件夹Template,新建一个DefaultMarkerSymbol.xaml的Silverlight资源字典文件,如下图: 2.打开

Template 模板的继承

index.html {% extends "base.html" %} {% block content %} <h1>Hi, {{user.nickname}}!</h1> {% for post in posts %} <div><p>{{post.author.nickname}} says: <b>{{post.body}}</b></p></div> {% endfor %} {

设计模式之&mdash;&mdash;Template模板模式

Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的那样进行. 示例程序: 将一段字符串和字符循环显示五次的程序: AbstractDisplay 父类抽象的模板,里面定义了处理流程,但是没有具体把实现写出来 package site.wangxin520.gof.template; /** * 模板模式的模板,使用的是抽象类和抽象方法. * 在此模

Flask 的 template模板 与 jinja2语法

Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for item in List %}<li>{{item}}</li>{% endfor %} 字典 {% for k,v in Dict.items() %}<li>{{k}}{{v}}</li>{% endfor %} 2 注意:Markup等价django的mark

微信小程序-template模板

============================= 构建template模板                   ============================= 1.分析得出共为3个模板. ①:从最小模板入手. ============================== 1. 原文地址:https://www.cnblogs.com/vip-deng-vip/p/10358146.html

Django基础,Day10 - template 模板引擎与路径设置

作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支持自生内置的一套模板系统DTL(Django Template Language) 和 有名的Jinja2模板系统.当然,也可以从第三方模块中之前其他模板系统.如果没有特殊要求,建议使用Django自带的DTL模板系统,这也是django 1.8之前唯一可以的内置选项. TEMPLATE 默认配置

Django Template模板

Django Template 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. 下面我们来调用html views def index(request,user): if request.method == 'GET': user_info = { 'username':'alex', 'name':'Alex Li' } return render(request,'app01/index.html',{'user_obj'

C++ template —— 模板中的名称(三)

第9章 模板中的名称------------------------------------------------------------------------------------------------------------C++(与C一样)是一种上下文相关语言:对于C++的一个构造,我们不能脱离它的上下文来理解它.模板也是一种构造,它必须处理多种上下文相关信息:(1)模板出现的上下文:(2)模板实例化的上下文:(3)用来实例化模板的模板实参的上下文. 9.1 名称的分类 主要的命名