模版语法传值

  1. {{}}:变量相关
  2. 基础数据类型能够传过去。
  3. 函数会自动加括号调用,不会传值
  4. 类会自动实例化,不会传值
  5. django模版语法取值是固定的格式,只能采用‘句点符’
  6. .索引 .键 两者可以混用
  7. {% %}:逻辑相关

模版语法过滤器

过滤器就类似于一些模版语法内置方法
django有内置60多个过滤器,此处我们只介绍几个

基本语法{{数据|过滤器:参数}}

统计长度:
{{数据|length}}
默认值:
{{数据|default:‘默认值’}}
文件大小:
{{数据|filesizeformat}}
日期格式化:
{{数据|date:‘Y-m-d H:i:s’}}
切片操作:(支持步长)
{{数据|slice:‘索引+步长’}}
摘要(切取字符):
{{数据|truncatechars:摘要长度}}
切取单词:
{{数据|truncatewords:个数}}
移除特定字符:
{{数据|cut:‘’}}
拼接:
{{数据|join:‘’}}
拼接(支持加法):
{{数据|Add:‘’}}
取消转义:
{{数据|safe}}

模版语法之标签

for循环

{% for foo in l %}
    {{ forloop }}
{% endfor %}

{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
                                        索引                            计数                    倒序计数                倒序索引                    是否是第一次循环



if判断

{% if t %}
{% else %} els需要手动补全
{% endif %} 




for和if混合使用


{% for foo in l %}
    {% if forloop.first %}
        <p>第一次</p>
    {% elif forloop.last %}
    {% else %}
        <p>{{ foo }}</p>
    {% endif %}
    {% empty %}
        <p>for循环的可迭代对象内没有元素无法循环</p>
{% endfor %}




with取别名

{% with 复杂获取数据句式 as 别名 %}

{% endwith %}

自定义标签过滤器、标签、inclusion_tag

必须先操作的三个步骤
1.在应用下创建一个名称为:templatetags 文件夹(名字必须为该名字)
2.templatetags下创建一个名字为任意的py文件
3.在py文件内书写
from django import template
register = template.Library()

# 自定义过滤器
@register.filter(name='sum')
def mysum(v1, v2):
    return v1 + v2

<h1>自定义过滤器使用</h1>
{% load mytags %}
{{ q|sum:q1 





#自定义标签
@register.simple_tag(name='bg')
def bgm(a,b,c,d):
    return a+b+c+d


<h1>自定义标签使用</h1>
{% load mytags %}
{% bg a b c d %}






# 自定义inclusion_tag
@register.inclusion_tag(name='inc')
def incl_tag(n):
    data = ['第{}项'.format(i) for   i in range(n)]
    return locals()

<h1>自定义inclusion_tag使用</h1>
{% load mytags %}
{% inc 10 %}

模版的继承

{% extends 'home.html' %}
    继承home页面模版


声明哪块代码可以被修改
{% block content %}
    模版内能被修改的代码块
{% endblock %}



使用:
{% block content %}
    被修改后的代码块
{% endblock %}




注意:该修改是在继承页面进行修改,不在被继承的模板页面进行修改





一般情况下,模版下的js、css、html三块都能修改,实现同一个页面,不同的效果
划分的区域越多,模版的拓展性越强

模版的导入
{% include ‘home.html’ %}