Django 模板语法

传值

# 传值方式1:利用字典挨个传值
return render(request,'index.html',{'i':i,'f':f,'s':s})

# 传值方式2:简单粗暴  locals()将当前名称空间中所有的变量名全部传递给页面
return render(request,'index.html',locals())

"""
    传值方式1  传值精确 不会造成资源浪费
    传值方式2  传值粗糙 可能会造成一定的资源浪费
"""
补充:传递函数名和类名都会自动加括号调用(模板语法不支持额外的传参)

获取值

'''django模板语法取值只能采用点符(.) '''
索引 键都可以无限制的点点点
<p>{{ d.hobby.3.username }}</p>

过滤器

# 类似于python的内置方法
<p>过滤器:将竖杆左侧的数据当做第一个参数</p>

<p>统计长度:{{ s|length }}</p>
<p>加法运算:{{ i|add:100000000000 }}</p>
<p>字符串拼接:{{ s|add:'heiheihei' }}</p>
<p>日期格式:{{ ctime|date:'Y年-m月-d日' }}</p>
<p>默认值:{{ b|default:'哈哈' }}</p>
<p>默认值:{{ b1|default:'哈哈' }}</p>
<p>文件大小:{{ file_size|filesizeformat }}</p>
<p>截取文本(三个点也算):{{ s|truncatechars:6 }}</p>
<p>截取文本(三个点不算)空格:{{ s|truncatewords:3 }}</p>
<p>转义(识别HTML标签){{ h|safe }}</p>

转义(识别HTML标签)
	前端
    	|safe
    后端
    	from django.utils.safestring import mark_safe
    	sss1 = mark_safe('<h2>老子要挣大钱</h2>')
    ps:前端代码也可以在后端写好传入!!!

标签

# 类似于python的流程控制
{% for foo in s %}
{% endfor %}

{% if forloop.first %}
{% elif forloop.last %}
{% else %}
{% endif %}

"""
{{}}  变量相关
{%%}  逻辑相关
"""
# 了解
{% with d.hobby.3.username as name %}
    {{ name }}
    {{ d.hobby.3.username }}
{% endwith %}

自定义过滤器、标签、inclusion_tag

# 类似于python里面的自定义函数
1.在应用下创建一个名字必须叫"templatetags"文件夹
2.在上述文件夹内创建一个任意名称的py文件
3.在该py文件内固定先书写以下两句话
	from django import template
    register = template.Library()
    
 
# 自定义过滤器
@register.filter(name='myfilter')
def index(a,b):
    # 简单的加法运算
    return a + b


# 自定义标签
@register.simple_tag(name='mysimple')
def func1(a,b,c,d):
    return '%s-%s|%s?%s'%(a,b,c,d)


# 自定义inclusion_tag
@register.inclusion_tag('login.html',name='my_inclusion_tag')
def func2(n):
    l = []
    for i in range(1,n+1):
        l.append('第%s页'%i)
    return locals()


前端
{% load mytag %}
{{ i|myfilter:666 }}

{% mysimple 1 'jason' 222 'egon' %}

{% my_inclusion_tag 10 %}
{% my_inclusion_tag 8 %}

inclusion_tag
	当某个区域需要反复使用并且数据不是固定的

模板的导入

# 类似于后端到模块 想要什么局部页面直接导入即可

{% include 'myform.html' %}

模板的继承

先使用block划定区域
母版
    {% block 区域名称 %}
    {% endblock %}
子版
	{% extends 'home.html' %}
    {% block 区域名称 %}
	{% endblock %}
  
母版在划定区域的时候一般都应该有三个区域
   css区域
   html文档区域
   js区域
   ps:目的是为了让子版具有独立的css js等 增加扩展性
    {% block css %}

    {% endblock %}
    
    {% block content %}

    {% endblock %}
    
    {% block js %}

    {% endblock %}
 
ps:子版也可以继续使用母版划定区域内的内容
    {{ block.super }}
posted @ 2021-04-12 10:19  最冷不过冬夜  阅读(94)  评论(0编辑  收藏  举报