一 模板语法传值

{{}}: 变量相关、过滤器

{%%}: 逻辑相关(静态文件配置、反向解析、标签相关、模版继承和 导入)

def index(request):
# 模板语法可以传递的后端python数据类型
n = 123
f = 1.23
s = '我不想值班'
b = True
l = ['lq', 'zd', 'xiaobao', '陈禹']
t = (11, 22, 33, 44)
d = {'username': 'lq', 'age': 18}
se = {'lr', '洋洋', 'cys'} def func(): # 传递函数名会自动加括号调用,当是模板语法不支持给函数传额外的参数
print('我被执行了')
return '哈哈,今天不值班' class Myclass(): # 传类名的时候也会自动加括号调用(实例化)
def get_self(self):
return 'self' @staticmethod
def get_func():
return 'func' @classmethod
def get_class(cls):
return 'cls' obj = Myclass() # return render(request,'index.html',{}) # 一个个传
return render(request, 'index.html', locals()) <p>{{ n }}</p>
<p>{{ f }}</p>
<p>{{ s }}</p>
<p>{{ b }}</p>
<p>{{ l }}</p>
<p>{{ d }}</p>
<p>{{ t }}</p>
<p>{{ se }}</p>
<p>{{ func }}</p>
<p>会加括号,进行实例化{{ Myclass }}</p>
<p>{{ obj }}</p>
<p>内部能够自动判断出当前的变量名是否可以加括号调用,如果可以就会自动执行,针对的是函数名和类名</p>
<p>{{ obj.get_self }}</p>
<p>{{ obj.get_func }}</p>
<p>{{ obj.get_class }}</p> # django模板语法的取值,是固定的格式,只能采用“句点符”
<p>字典的取值{{ d.username }}</p>
<p>列表的索引{{ l.0 }}</p>
# 既可以点键也可以点索引,还可以两者混用

二 模板语法之过滤器

# 过滤器就类似于是模板语法内置的 内置方法
# django内置有60多个过滤器,了解10个左右差不多,
# 基本语法
{{数据|过滤器:参数}} # 转义
1、前端
|safe
2、后端
from django.utils.safestring import mark_safe
res=mark_safe('<h1>陈愈泽</h1>')
'''
在写全栈项目的时候,前端代码不一定非要在前端页面书写
也可以在后端写好,然后传递给前端页面
''' # 视图函数
def index(request):
# 模板语法可以传递的后端python数据类型
n = 123
f = 1.23
s = '我不想值班'
b = True
l = ['lq', 'zd', 'xiaobao', '陈禹泽', '杉']
t = (11, 22, 33, 44)
d = {'username': 'lq', 'age': 18, 'hobby': 'football'}
se = {'lr', '洋洋', 'cys'} def func(): # 传递函数名会自动加括号调用,当是模板语法不支持给函数传额外的参数
print('我被执行了')
return '哈哈,今天不值班' class Myclass(): # 传类名的时候也会自动加括号调用(实例化)
def get_self(self):
return 'self' @staticmethod
def get_func():
return 'func' @classmethod
def get_class(cls):
return 'cls' obj = Myclass() file_size = 123123123
import datetime
current_time = datetime.datetime.now() info = '我不想值班我不想值班我不想值班我不想值班我不想值班我不想值班我不想值班我不想值班我不想值班我不想值班'
egl = 'my name is lq my age is 18 my hobby is read'
msg = 'I love football I belive china'
hhh = '<h>小宝</h1>'
from django.utils.safestring import mark_safe
res = mark_safe('<h1>陈愈</h1>')
# return render(request,'index.html',{}) # 一个个传
return render(request, 'index.html', locals()) # 前端代码
<h1>过滤器</h1>
<p>统计长度:{{ s|length }}</p>
<p>默认值(第一个参数布尔值是True就展示第一个参数的值是否在展示冒号后面的值):{{ b|default }}</p>
<p>文件大小:{{ file_size|filesizeformat }}</p>
<p>日期大小:{{ current_time|date:'Y-m-d H:i:s' }}</p>
<p>切片操作(支持步长):{{ l|slice:'0:4:2' }}</p>
<p>切取字符(从info字符串中截取9个字符串,包含三个点):{{ info|truncatechars:9 }}</p>
<p>切取单词(不包括三个点 按照空格切):{{ egl|truncatewords:9 }}</p>
<p>切取单词(不包括三个点 按照空格切):{{ info|truncatewords:9 }}</p>
<p>移除特定的字符:{{ msg|cut:' ' }}</p>
<p>拼接操作:{{ l|join:'$' }}</p>
<p>拼接操作(加法):{{ n|add:10 }}</p>
<p>拼接操作(加法):{{ s|add:msg }}</p>
<p>默认前端标签不转义{{ res }}</p>
<p>需要前端标签转义{{ res|safe }}</p>

三 模板语法之标签

# for循环
{% for foo in l %} <!-- for i in l-->
{# <p>{{ forloop }}</p> forloop是模版语法自带的一个变量,跟if结合使用
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}#}
<p>{{ foo }}</p>
{% endfor %} # if判断
{% if b %}
<p>不想值班</p>
{% elif s%}
<p>我真的不值班</p>
{% else %}
<p>是真的</p>
{% endif %} # for与if混合使用
{% for foo in l %}
{% if forloop.first %}
<p>这是我的第一次</p>
{% elif forloop.last %}
<p>这是我的最后一次</p>
{% else %}
<p>{{ foo }}</p>
{% endif %}
{% empty %}
<p>for循环的可迭代对象内部没有元素,根本没法循环</p>
{% endfor %} # 字典的for循环使用
{% for foo in d.keys %}
<p>{{ foo }}</p>
{% endfor %}
{% for foo in d.values %}
<p>{{ foo }}</p>
{% endfor %}
{% for foo in d.items %}
<p>{{ foo }}</p>
{% endfor %} # with起别名
{% with d.username as nb %}
<p>{{ nb }}</p>
{% endwith %}
# 在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式

四 自定义过滤器、标签

'''
三步走
1、在应用下创建一个名字必须叫templatetags文件夹
2、在该文件夹内创建任意名称的py文件 eg:mytag.py
3、在该py文件内必须先书写下面两句话
'''
mytags.py

from django import template register=template.Library() # 自定义过滤器
@register.filter(name='xiaobao')
def my_sum(v1, v2):
return v1 + v2 # 使用
{% load mytags %} }}
<p>{{ n|xiaobao:100 }}</p> # 自定义标签(参数可以有多个) 类似于自定义函数
@register.simple_tag(name='lq')
def index(a, b, c, d):
return '{}-{}-{}-{}'.format(a, b, c, d) # 使用
{% load mytags %}
# 标签多个参数彼此之间空格隔开
<p>{% lq 'zd' 12 12 12 %}</p>

五 自定义inclusion_tag

'''
内部原理
先定义一个方法
在页面上调用该方法,并且可以传值
该方法会生成一些数据然后传递给一个html页面
之后将渲染好的结果放到调用的位置
'''
@register.inclusion_tag('left_menu.html')
def left(n):
data = ['第{}项'.format(i) for i in range(n)]
# 第一种
# return {'data':data}
# 第二种
return locals() # 将data传递给left_menu.html # 把left_menu.html传递给index.html中的一个局部
{% load mytags %}
{% left 10 %} '''
总结:当html页面某一个地方的页面需要传参数才能动态的渲染出来,并且在多个页面上都需要使用到该局部,那么就考虑将该局部页面做成inclusion_tag形式
(在讲bbs的时候会使用到)
'''

六 模板的继承

'''
有些网站页面整体都差不多,只是某一些局部在做变化
'''
# 模板得继承,自己先选好一个想要继承得区域
{% extends 'home.html' %} # 继承之后子页面跟模板页面长的是一模一样的,需要在模板页面上提前划定可以修改的区域
{% block content %}
模板内容
{% endblock %} # 子页面就可以声明想要修改那块划定了的区域
{% block content %}
子页面内容
{% endblock %} '''
一般情况下模版页面上应该至少有三块可以被修改的区域
1、css区域
2、html区域
3、js区域
''' 模板页面
{% block css %} {% endblock %} {% block js %} {% endblock %} 子页面
{% block css %}
<style>
h1{
color: red;
}
</style>
{% endblock %} {% block js %}
<script>
alert('登录页面')
</script>
{% endblock %} '''
一般情况下,模版的页面上划定的区域越多,那么该模版的扩展性就越高
但是如果太多,还不如自己直接写
'''

七 模版的导入

'''
将页面的某一个局部当成模块的形式
那个地方需要就可以直接导入使用即可
''' {% block content %}
<h1 class="text-center">登录页面</h1>
<form action="">
<P>username: <input type="text" class="form-control"></P>
<P>password: <input type="text" class="form-control"></P>
<input type="submit" class="btn btn-success">
</form>
{# 模版导入 #}
{% include 'modul import.html' %}
{% endblock %}

django(模版层)的更多相关文章

  1. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  2. django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...

  3. Django之模版层

    一.模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别,也就是说,HTML被直接硬编码在python代码之中. def current_datetime(request): now = ...

  4. Django 之模版层

    一.模板简介 将前端页面和Python 的代码分离是一种的开发模式. 为此 Django专门提供了模板系统 (Template System,即模板层)来实现这种模式. Django 的模板 = HT ...

  5. 6.-Django设计模式及模版层

    一.MVC (java等其他语言) MVC代表Model-view-Contorller(模型-视图-控制器)模式 M模型层主要用于对数据库层的封装 V视图层用于向用户展示结果 C控制器用于处理请求. ...

  6. 第三章:模版层 - 1:Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

  7. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  8. 3.Django| 视图层| 模板层

    1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XM ...

  9. django 模版 语法与使用

    目录 django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...

  10. Django--路由层、视图层、模版层

    路由层: 路由匹配 url(正则表达式,视图函数内存地址) 只要正则匹配到了内容,就不再往下匹配,而是直接运行后面的视图函数 匹配首页) url(r'^&', home) 匹配尾页 url(r ...

随机推荐

  1. AdoQuery 多列 查询 定位方法

    frmClientDm.TopItemSkuShow_adoq.Locate('top_outer_iid;top_outer_sid', VarArrayOf([top_outer_iid,top_ ...

  2. 转载洛谷:23.08.19 普及模拟1 T1

    Past 题目描述 所有人,都有一段支离破碎的过去. 你有\(n\)段过去的经历,有时顺利,有时不顺,于是你用一个评价值\(a_i\)来描述你的第\(i\)段经历,它们构成了长度为\(n\)的序列\( ...

  3. [Java]Map接口有关总结

    Map接口 1.HashMap和Hashtable的区别 线程安全方面.HashMap是非线程安全的,Hashtable是线程安全的.因为Hashtable内部方法基本都经过synchronized修 ...

  4. 一文看懂"async"和“await”关键词是如何简化了C#中多线程的开发过程

    一文看懂"async"和"await"关键词是如何简化了C#中多线程的开发过程 当我们使用需要长时间运行的方法(即,用于读取大文件或从网络下载大量资源)时,在同 ...

  5. 从零开始的react入门教程(四),了解常用的条件渲染、列表渲染与独一无二的key

    壹 ❀ 引 在从零开始的react入门教程(三),了解react事件与使用注意项一文中,我们了解了react中事件命名规则,绑定事件时对于this的处理,以及事件中可使用的e对象.那么这篇文章中我们来 ...

  6. zabbix-server.service failed解决方法

    1.问题描述 centos7中安装的zabbix server在重启系统后无法启动了,查看状态报错如下: 2.问题原因 selinux没有关闭! 3.解决 永久关闭selinux, 将SELINUX值 ...

  7. 编译 windows 上的 qt 静态库

    记录命令行编译过程: 针对 Qt 5.15.2 版本, 只需要 Source 文件就行 打开 x86 Native Tools Command Prompt for VS 2019,如果需要编译 x6 ...

  8. windbg 学习

    常用的 windbg 命令 .ecxr 用来切换到异常发生时的上下文,主要用在分析静态 dump 文件的时候.当我们使用 .reload 命令去强制加载库的 pdb 文件后,需要执行 .ecxr 命令 ...

  9. [超实用插件]在Visual Studio中查看EF Core查询计划

    前言 EF Core是我们.NET开发中比较常用的一款ORM框架,今天我们分享一款可以直接在Visual Studio中查看EF Core查询计划调试器可视化工具(帮助开发者分析和优化数据库查询性能) ...

  10. ioutil.ReadDir读取目录下的内容

    func dirents(dir string) []os.FileInfo{ entries, err := ioutil.ReadDir(dir) // 读取目录并返回排好序的文件以及子目录名 i ...