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}} 继承父类的方式
浙公网安备 33010602011771号