Django模板层

模板语法传值

https://www.cnblogs.com/Dominic-Ji/articles/11109067.html#_label15

# 注释
	<!--HTML注释-->	浏览器能够查看
    {#模板语法注释#}    浏览器查看不了
        
def reg(request):
    # python基本数据类型
    f = 1.1
    i = 11
    s = 'hello world'
    l = [11,22,33,44]
    d = {'username':"jason",'password':123}
    t = (11,22,33,44,55,66,77)
    se = {11,22,33,44,55,66}
    b = True
    # 函数(自动加括号调用函数 展示的是函数的返回值)
    def func(args):  # 模板语法不支持给函数传递额外的参数
        print('from func')
        return '下午有点困'
    # 面向对象
    class MyClass(object):  # 自动加括号实例化产生对象
        def get_obj(self):
            return 'from obj'
        @classmethod
        def get_cls(cls):
            return 'from cls'
        @staticmethod
        def get_func():
            return 'from func'
    obj = MyClass()
    # 1.指名道姓的传(需要传的值较少)
    # return render(request,'reg.html',{...})
    # 2.一次性批量传(效率偏低)  为了教学方便我们使用locals居多
    # return render(request, 'reg.html',locals())
    return render(request,'reg.html',locals())

模板语法取值

取值只能使用句点符(.)
<p>{{ l.0 }}</p>
<p>{{ d.username }}</p>
<p>{{ d.hobby.3.addr }}</p>

模板语法过滤器

<p>过滤器:  管道符 左侧当做过滤器的第一个参数 右侧有时候还可以支持再传一个参数(冒号开头)</p>
<p>统计长度:{{ l|length }}</p>
<p>自增运算:{{ i|add:123 }}、拼接操作:{{ s|add:'去你妹的' }}</p>
<p>日期转换:{{ ctime }}、{{ ctime|date:'Y-m-d' }}</p>
<p>文件大小:{{ file_size|filesizeformat }}</p>
<p>截取字符(三个点也算):{{ desc|truncatechars:6 }}</p>
<p>截取单词(三个点不算):{{ desc|truncatewords:3 }}</p>
<p>切片操作:{{ s|slice:'0:4' }}</p>
<p>默认值(判断布尔值):{{ b|default:'这个东西布尔值是False' }}</p>
<p>文本转义:{{ ht|safe }}</p>
<p>文本转义:{{ xss }}</p>
<p>文本转义:{{ ht1 }}</p>
    
后端转义
from django.utils.safestring import mark_safe
ht1 = '<h1>一级标题</h1>'
ht1 = mark_safe(ht1)

模板语法标签(流程控制)

{{}}	变量相关(引用变量值)
{%%}	逻辑相关(流程控制 模块方法)

<p>标签: 流程控制</p>
{% for i in lll %}
    {% if forloop.first %}
        <p>这是我的第一次循环</p>
    {% elif forloop.last %}
        <p>这是我的最后一次循环</p>
    {% else %}
        <p>{{ i }}</p>
    {% endif %}
    {% empty %}
        <p>该对象里面没有值</p>
{% endfor %}

自定义过滤器、标签、inclusion_tag

1.在应用下创建一个名字必须叫templatetags文件夹
2.在该文件夹内创建一个任意名称的py文件
3.在py文件内必须要书写两行固定的代码
	from django.template import Library
     register = Library()
 
# 自定义过滤器
@register.filter(is_safe=False,name='aaa')
def my_plus(a,b):
    return a + b


# 自定义标签(自定义函数)
@register.simple_tag(name='bbb')
def func(a,b,c,d):
    return '%s-%s-%s-%s'%(a,b,c,d)


# 自定义inclusion_tag
@register.inclusion_tag(filename='ccc.html',name='myinc')
def index(n):
    new_l = ['第%s页'%i for i in range(1,n+1)]
    return locals()
# 自定义一个常用的,模板相似的一块标签

模板的继承

需求:页面主体不变,部分区域变化
模板继承:
	1.需要先在母版中使用block提前划定区域
    	{% block 区域名称 %}
    	{% endblock %}
    2.在子版中先继承,在局部替换
        {% extends '母版名称.html' %}
        {% block 区域名称 %}
        {% endblock %}
        
继承一般有三个区域:css,content(页面),js
调用母版中的内容:{{ block.super }}

模板的导入

先写一个常用的网页块,在需要使用时导入,功能没有 自定义inclusion_tag 的好
{% include 'myform.html' %} 

posted @ 2021-06-30 20:25  zheng-sn  阅读(17)  评论(0)    收藏  举报