Django模板(templates)

准备

  • 新建templates文件
  • settings设置TEMPLATES中的:DIRS指定模板文件路径。

Django自带模板

  • 通过后端render()函数渲染。
  • 模板语法:render(request对象,‘需要渲染的页面’,用于渲染模板的数据字典(context))

模板语法

模板变量

  • 数字、字母、下划线、点(不能以下划线开头)
  • {{变量}}
  • 前端用于渲染的内容:变量、字典、列表…
  • 后端:用于渲染的数据字典:contex={}包含所有前端需要的数据内容。
    • 变量取值:变量名
    • 点语法:
    • 字典通过关键字取值 dict.key
    • 列表通过下标取值 list.0 (注意不能用[]形式)

模板语句

  1. for循环
    {% for item in 列表 %} {{forloop.counter}} # (模板变量)下标计数,默认从1开始 {{forloop.counter0}} #从0开始计数。只有0和1。 {% empty %} {% endfor %}

note:

  1. 变量是两对大括号,语法是一对大括号+一对百分号,并且百分号和大括号之间不能有空格,百分号和语句之间必须有空格。
  2. 有开就有关。
    {% for… %}-----{% endfor %}
    {% if… %}-------{% endif %}

note:

  1. 运算符两侧不能紧挨常量和变量必须要有空格。

过滤器

1.系统自带

{{变量|过滤器:参数}}
note:

  1. 过滤器格式为模板变量
  2. 变量过滤的内容即为在页面显示的内容。
{{ age|defult:18 }}  # 当age不存在时,页面显示的内容为18,age存在时在页面显示的内容为Age值。
{{ list|length }} # 页面显示的内容为list长度。
{{ data|safe }} # 若data是个字符串,字符串中含有标签等,但是不会被html页面当作标签——即转义。设置safe则不会显示原本会显示的标签内容。

2.自定义过滤器

准备

  1. 在自己的应用里新建一个templatetags包。(包的.py文件就是你要引用的过滤器)
  2. 在.py文件中导入:
from django import template
  1. 实列化注册对象(注册装饰器)
register = template.Library() #Template调用自己的库方法
  1. 使用装饰器自定义过滤器(过滤器的实质是一个函数,自定义一个过滤器就是写一个函数)
@register.filter
def odd(x)
    return x / 3
  1. 在html中使用自定义过滤器
{% load oddfilter %}  # {% load odd_filter %}
<h1>{{ num | odd }}</h1>  #显示额结果为视图中的num/3

note:

  • 自定义过滤器写好使用前记得重启服务器。

模板继承

父模板:多个页面共同使用的功能,在填充差异性内容的部分使用:

{% block name%}
{% endblock name%}

子模版:

{% extends '父模板路径'%}
实际填充内容
{{ block.super }}  #用于获取父模板中block的内容 个人认为父模板block中尽量不要填写内容,尽量不使用block.super
{% endblock 名称 %}

模板注释

单行注释:

{#...#}

{% comment%}

{% endcomment%}
``

Jinja2模板

djnago重量级框架,运行速度慢.
jinja2第三方模板,可扩展功能,轻量级跑得快。flask内置的就是jinja2模板。
jinja2不是django内置模板,所以需要配置。
jinja2_env.py
settings把django改为jinja2

使用基本和django自带模板相同,区别主要优以下几点:

1. for循环

loop.index/loop.index0
loop.revindex/loop.revindex0 # 倒着取
loop.first/loop.last # 第一次为True
loop.length
loop.cycle # {{loop.cycle(‘奇数’,‘函数’)}}循环过程中遍历循环输出cycle中的data。

自定义过滤器

  1. 在jinja2_env.py文件中自定义过滤器
from jinja2 import Environment
def enviroment(**options)
    env = Enviroment(**options)
    # 2.将自定义的过滤器添加到环境中
    env.filter['do_listreverse'] = do_listreverse
# 1.自定义过滤器
def do_listreverse(li):
    if li == 'B':
    return '哈哈'

猜你喜欢

转载自blog.csdn.net/xyx_x/article/details/89944426