django模板层

旧巷老猫 提交于 2019-12-02 06:47:44

模板传值

传函数名的时候 会自动加括号调用函数 将函数的返回值展示在html页面上
django模板语法不支持函数或对象传参
django模板语法在获取容器类型内部元素的值的时候 统一只采用 句点符(.),就是点取值

过滤器

过滤器类似于python的内置函数,用来把视图传入的变量值加以修饰后再显示, 具体语法如下

{{ a|过滤器名字:b }}

标签

标签是为了在模板中完成一些特殊功能,语法为{% 标签名 %},一些标签还需要搭 配结束标签 {% endtag %}

Copy#1、遍历每一个元素:
{% for person in person_list %}
 <p>{{ person.name }}</p>
{% endfor %}
#2、可以利用{% for obj in list reversed %}反向循环。

#3、遍历一个字典:
{% for key,val in dic.items %}
 <p>{{ key }}:{{ val }}</p>
{% endfor %}
#4、循环序号可以通过{{ forloop }}显示
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是第一次循环则返回True,否则返回False
forloop.last 当前循环是最后一次循环则返回True,否则返回False
forloop.parentloop 本层循环的外层循环
#5、for标签可以带有一个可选的{% empty %} 从句,在变量person_list为空或者没有被找到时,则执行empty子
句
{% for person in person_list %}
 <p>{{ person.name }}</p>
{% empty %}
 <p>sorry,no person here</p>
{% endfor %}

自定义过滤器,标签

第一步:
在app文件下创建一个templatetags(必须是这个文件名)
第二步:
在文件加下面创建一个任意名字的py文件
第三步:
在py文件中
导入模块: from django.template import library
register = library() -> register整个名字也是固定的
第四步:
开始自定义过滤器

Copy@register.filter(name="过滤器名字")
def foo(a,b)   -> 必须两个参数,名字随便取
    return a+b

开始自定义标签

Copy@register.simple_tag(name="标签名")
def foo(a,b,c,d) -> 随便几个参数
    return f"{a}/{b}/{c}/{d}"

模板的继承

事先在html文件的代码中,也就是html模板中通过block划定区域

Copy{% block 区域名字 %}
...
{% endblock %}

子模版中的使用方式

Copy{% extends 'html文件名字' %}  // 就相当于导包

{% block 区域名字 %}
...                -> 在这里面写代码
{% endblock %}

一个页面上 block块越多 页面的扩展性越高
通常情况下 都应该有三片区域

Copy# css
{% block css %}

{% endblock %}
# 内容              
{% block content %}
    
{% endblock %}
#                 
{% block js %}
    
{% endblock %}

子板中还可以通过{{ block.super }} 来继续使用母版的内容

模板的导入

当你写了一个特别好看的form表单 你想再多个页面上都使用这个form表单
你就可以将你写的form表单当作模块的形式导入 导入过来之后 就可以直接展示

{% include 'good_page.html' %}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!