Django(5) 模版层

模版层

一、模版语法之传值

view视图层
def func1(request):
x = 1 y = '哈哈哈'
l = [1, 2, 3]
z = {'name': 'judy'}
def func():
return '加油哦'
return render(request, 'func1.html', locals())-->利用locals()可以将后端数据一股脑扔到前端页面,前端页面用双层大括号接收即可。
# 将后端数据传给页面的方法:
# 方式1:
# 利用local() --> 这是一股脑儿传进去所有的东西,所以有点浪费资源
# return render(request,'func1.html',locals())
# 方式2:
# return render(request,'func1.html',{'x':x})
# 利用大括号精确传值,就是如果值多的话,就会很麻烦 templates
模版层

{{ x }}


{{ y }}


{{ l }}


{{ z }}


{{ func }}

-->接收函数名会自动加上括号调用并且返回函数的返回值在页面上,不支持穿参数,所以只能是无参函数,传递类名会自动实例化成对象,传递对象就是对象,对象可以点属性和方法,另外,模版语法支持python所有的数据类型。模版层拿值就是双层大括号括起来

模版语法取值

Django模版语法取值只能用句点符号

{{ l.2 }}


{{ z.name }}

模版语法之过滤器 模版语法过滤利用竖杠|

1、统计长度

{{ l|length }}


{{ z|length }}


2、加法运算

{{ x|add:1000000 }}


3、在视图层函数写sss='

加油

' h1标签在传递给前端后,不会渲染成一级标签,如果需要渲染成一级标签,正确的写法是

{{ sss|safe }}

,或者也可以在视图层利用模块:
from django.utils.safestring import mark_safe
sss1=mark_safe('

加油

')
4、truncatechars

{{ y|truncatechars:1 }}


默认在后面加上三个点...,数字里面会自动包含三个点,例如y的值为北京,

{{ y|truncatewords:1}}

以空格为分界线,数字不包含三个点
-->生产环境根据情况分析吧
5、

{{ y|add:'xxx' }}

字符串拼接
6、

{{ b|default:'嘻嘻' }}

如果b布尔值为True,直接打印b本身的值

{{ b1|default:'哈哈' }}

如果b布尔值为False,直接打印|后面的值

模版语法之流程控制

1、if判断
在模版层html文件中写if判断只需要 if+tab键

{% if b %}

有值


{% elif b %}

嘻嘻


{% else %}

哈哈

2、for循环 for+tab健

{% for foo in b %}

{{ forloop }}

3、两者结合使用

{% for foo in l %}
{% if forloop.first %} -->forloop是记录循环情况的对象

这是第一次循环


{% elif forloop.last %}

这是最后一次循环


{% else %}

{{ foo }}


{% endif %}

4、{{}}和{%%}的使用

{{}} 和变量有关
{%%}和逻辑相关

5、for循环中当传入的数据是空的

{%empty%}

传入的数据是空的


6、起别名

{%with d.hobby.3.username as name%}
{{name}}

自定义过滤器,标签,inclusion_tag

1、自定义过滤器类似于python里面的自定义函数

具体用法如下:
(1)必须在应用下创建一个名为itemplatetags的文件夹
(2)在上述文件夹中创建一个任意名称的py文件 比如mytag.py
(3)先写下面两句话,再编写自己的过滤器
from django import templates
register = template.Library()
@register.filter(name='myfilter')
def index(a+b):-->前端只能接收两个参数,可以使用字符串拼接来增加参数的个数
return a+b
(4)在前端页面使用
先加载:{%load mytag%}
再使用:{{x|myfilter:66}}-->相当于 传过来的x这个值加上66

2、自定义标签
自定义标签就是流程控制

具体使用:
(1)和上面一样先导入
(2)前后端语法
后端
@register.simple_tag(name='mysimple')
def func1(a,b,c,d):
return '%s-%s|%s?%s' %(a,b,c,d)
前端 {% mysimple 1 'amber' 222 'judy' %}

3、inclusion_tag
(1)在templates文件夹中创建login.html
(2)在mytag.py文件中写tag
@register.inclusion_tag('login.html', name='my_inclusion_tag')--》将结果发送给login.html
def func2(n):
l = ['第%s页' % i for i in range(1, n+1)]
return locals()-->将for循环所有的数据发送给login.html
(3)在我们前端显示页面上
{% load mytag %}
{% my_inclusion_tag 10 %}
当某一块内容数据经常使用,并且数据不是固定的

模版的导入

{%%include '模版名'}

模版的继承

案例
1、以bootstrap框架为例,去官网下载所需要的静态文件,同时在项目跟目录下新建一个static文件夹,将下载好的静态文件放到里面
2、在setting.py 里面加入静态文件配置文件
STATICFILES_DIRS = (os.path.join(BASE_DIR, ‘static’), )
3、在bootstrap找一组组件进行练习,在base.html中
{% load static %} -->这两句话就是动态解析

再复制粘贴从官网的下来的文件
4、先使用block打标记
{%block 区域名称%}
这里放base.html可以被改动的地方
{%endblock%}
5、子版继承
{%extends 'base.html'%}
{%block 区域名%}
写新的东西

模版在划定区域的时候,一般都应该有三个区域,css区,html文档区域,js区域。
{{block.super}} 继承父类的方式

posted @ 2022-02-23 20:18  JudyJU  阅读(62)  评论(0)    收藏  举报