django—模板相关
关于在html文件中使用模板语言时,一些符号的含义
{{}}:显示变量相关,在模板渲染的时候替换成值
{%%}:处理逻辑相关
django模板语言中,对于列表字典等容器类型,不能够通过[ 索引/键值 ]的方式取值。
可以通过点(.)加索引值的方式来取值:
i.0 <====> 就是python语法中的 i[0]
i.name <====> 就是python语法中的 i[ "name" ]
i.keys <====> 就是python语法中的 i.keys()
i.items <====> 就是python语法中的 i.items()
通过点取值的优先级(从高到低排序):
- 在字典中查询 ,点后面的名称,会优先从字典的键值中匹配
- 属性或者方法, 其次去匹配类的属性或者方法
- 数字索引,最后才会去匹配数字索引
优先匹配到什么就是什么
标签
1、for循环标签
{% for i in l %}
中间做逻辑处理/显示相应的数据
{% endfor %}
只要使用到for循环,每个for循环过程中,都有一个共同的属性: forloop
forloop是一个字典,里面保存的数据如下:
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 6, 'revcounter0': 5, 'first': True, 'last': False}
通过forloop能够获取到for循环执行到某个轮次时的一些数据:
forloop.counter : 取得当前轮次的序号(从1开始)
forloop.counter0 :取得当前轮次的序号(从0开始)
forloop.revcounter : 取得当前轮次的序号(倒序,到1终止)
forloop.revcounter0 : 取得当前轮次的序号(倒序,到0终止)
forloop.first : 当前循环是否是第一轮次(布尔值,True or False)
forloop.last : 当前循环是否是最后一轮次(布尔值,True or False)
forloop.parentloop :如果当前循环外层还有一个循环,那么就能获取到此时的外层循环的forloop数据;
如果当前循环没有嵌套循环,那么该值就是空字典
2、{% empty %}
只能和for循环标签一起用,和if标签一起用报错
用途:当for循环对象为空时(可能是视图函数传值问题,或者是处理后的值本身为空),显示{% empty %}后的数据
{% for i in l %}
{{ i }}
{% empty %}
无信息
{% endfor %}
只有 l 的值为空 : 空字符串、空列表、空字典、空集合等。特殊地,l为None时也能够触发for循环内的empty(亲自测试过,None不是不可迭代的吗...)
只要l的有一个值,即便是字符串中的空格(" ")、列表中的空字符串[ "" ]等,都不会触发empty显示后续数据。
3、if判断标签
{% if %}
...
{% endif %}
模板语言中,if支持的逻辑判断:
not、and、or、==、>、<、>=、<=、!=、in、not in、is、is not
不支持运算操作,如{% if 2+3 > 1%}。想在判断过程使用运算操作,可以使用filter(过滤器,add)
不支持连续判断。
python中的连续判断: 10 > 5 > 2 结果为True
判断过程为:
1、 10 > 5 为True
2、 5 > 2 为True
3、将两次判断的过程做and运算,即True and True,最终结果为True
模板语言中的连续判断: 10 > 5 > 2 结果为False
判断过程为:
1、 10 > 5 为True, 对应的值就是1
2、 1 > 2 为False,最终结果为False
和js一样,模板语言是不支持类似python的连续判断机制。
4、with起别名,为后续使用提供便利
第一种写法:{% with obj.name as name %}
后续需要使用obj.name的话,可以直接用name替代
{{ name }} <====> {{ obj.name }}
第二种写法:{% with name = obj.name %}
过滤器
1、基本语法
{{ 数据 |过滤器:参数}}
过滤器和参数直接的冒号,左右两边不能有空格!!
2、django内置的一些过滤器
default:当数据为空时,显示default参数内的值。(数据为布尔值False时,也会触发default过滤器;为True时,正常显示True)
add:数组加法/减法(将add的值改为负数即可)
字符串的数字加减,最终也会显示数字。如{{ "4"| add:"2"}}显示6
还可以做字符串拼接和列表拼接操作。如{{ "ab" | add:"cd"}}显示abcd,{{ [1,2] | add:[3,4]}}显示[1,2,3,4]
列表拼接,必须是从视图函数中,传值过来的两个列表来做, {{ [1,2] | add:[3,4] }}这种形式无法调用add
upper/lower/title:字母大写/小写/首字母大写(该过滤器不需要参数)
length:取得当前数据的长度(不需要参数)
date:将日期数据格式化显示(格式化模板和python有不同之处)
{{ value|date:"Y-m-d H:i:s"}} "Y-m-d H:i:s" 表示年月日时分秒
python中的字符串格式化为 %Y-%m-%d %H:%M:%S
过滤器可以连用,如{{ "abc" |upper|lower|title }}最终显示Abc
更多的内置过滤器用法可以在官方手册中查看
3、自定义过滤器
过滤器最多只能有两个参数,第一个参数是当前需要处理的值,第二个参数是处理第一个参数所需要的值
过滤器可以只有第一个参数(如upper、lower、title)
自定义过滤器的步骤:
1、在对应的app下创建一个名为templatetags的python包;
2、在该包下创建一个python文件,文件名自定义(如mytags);
3、在该文件中先写上
from django import template
register = template.Library()
4、接着写上自定义的过滤器函数,并为其加上装饰器(@register.filter)
其中,templatetags和register不能写错!否则django识别不了自定义的过滤器
自定义过滤器的使用:
1、在需要用到自定义过滤器的模板文件中,引入自定义过滤器函数所在的python文件
如{% load mytags %}
2、使用过滤器语法,调用过滤器 {{ 待处理数据 | 自定义过滤器:参数 }}
注意:如果自定义过滤器是在django启动的情况下加入的,需要重启django服务器才能生效。
模板
1、模板的继承
{% extends "模板文件" %}
模板文件必须用引号包裹,否则会被当成变量处理
通常,将多个页面都会用到的公共部分放到一个文件中(母版),子文件在继承母版后,如果后续需要修改公共部分的元素,只需修改母版即可。
2、块
{% block 块名 %}
......
{% endblock %}
每个继承母版的子页面中,不可能每个地方都和母版一致,这就需要在母版中,用block的方式将后续其他页面可能需要修改的地方标记起来;
在子页面中,只需修改相应的块的内容,就能够实现将母版中对应的内容替换掉。
3、一般情况下,模板的继承语句放在模板文件的第一行。
这样的话,子页面中要展示的内容,就必须写在相应的block中,否则无法显示。
除非,将要展示的内容,放在模板的继承语句之前。
4、对于css、js需要将其标记在block中,以免子页面在继承母版的时候,继承到不必要的css和js
5、组件
{% include "组件名" %}
把一个页面公用的部分单独写入一个文件,如导航栏。
然后在需要用到的模板文件中,通过引入语句导入到文件中即可
组件和母版:
母版将所有页面共用的部分集合在一起。
组件将单个公共部分抽离到一个文件,避免有些页面只需要某个单独部分,而不想继承母版的全部的内容。
动态获取静态文件的路径
在django的settings中,STATIC_URL表示静态资源的引用。
每个静态文件的路径前必须有STATIC_URL作为前缀。
如果将静态文件的路径写死,那么后续修改STATIC_URL值的话,需要将每个静态文件的路径修改一遍,极其繁琐。
所以,可以通过模板语言来动态获取STATIC_URL的值,实现修改该值后,每个静态文件的路径都自动匹配上该值
动态获取的步骤:
先引入{% load static %}
方式1:<script src=" {% static 'js/xxx.js' %}"></script>
方式2:<script src=" {% get_static_prefix %}js/xxx.js"></script>
django—模板相关的更多相关文章
- Django 模板相关
Django 模板相关 视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面.目前市面上有非常多的模板系统,其中最 ...
- Django模板相关
1.母版 想象一个举着火炬的手,除了火炬这个手还能举棒球棍.举雷神之锤.举拖拉机钥匙等等,举得东西不同给人整体感觉就不同. 母版就相当于这个手(实际为一个html文件),其他相关的html文件就相当于 ...
- Django模板语言相关内容
Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...
- Django模板语言相关内容 Djan
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Django——模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Django框架04 /模板相关、别名/反向解析/路由分发
Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- django第六天(模板相关,过滤器和标记)
django第6天 DTL简介 django template language django模板语言 语法: filter{{}} tag{% %} 简单变量的使用 视图函数可以通过两种方式将变量船 ...
- django 一些相关问题
这两天在处理django项目时碰到一些问题 1.ur路径设置要忽略大小写,查找了很多资料,都没有发现相关的介绍,最后在谷歌上找到一个解决方案,https://groups.google.com/for ...
随机推荐
- 分布式文件系统之MogileFS的安装使用
一.简介 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发:它主要由三部分组成,第一部分是server端,server端主要包括 ...
- 关于java for循环常见练习题
使用for循环方式计算2+4+6+…+100的值 package day02; /** * 使用for循环方式计算2+4+6+…+100的值 * @author mu * */ public clas ...
- git 修改已提交了的备注信息的方法
git 修改已提交了的备注信息的方法: 1.当我们已通过 git commit -m '已提交的最新的备注' 命令将代码提交到了缓存区,或者进一步执行了 git push origin master ...
- java学习1day
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- win10 系统出现“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。”
公司无法访问共享 \192.168.7.101.win+R 输入gpedit.msc2.计算机配置-管理模板–网络-lanman 工作站-找到"启用不安全的来宾登录"选择 已启用. ...
- 浅谈c++(一)
本人为菜鸟一枚,如有错误,欢迎指正. 由于上半年学了C语言,为了更好的过渡到C++,我将在未来展示一下两者的不同以及优缺点.在c++中,不得不谈到类.这是C++中最重要的语法特征.我们可以通过它,定义 ...
- 把VS Code打造成Java开发IDE
近期,公司推行正版化,本人使用的是JetBrains教育版,是不允许进行商业开发的,因此开启了艰难的备用IDE选型之路.最终,我选定了轻量级的Visual Studio Code(以下简称VS Cod ...
- 在Linux系统下搭建和配置一个minio文件服务器(二)
上一篇主要讲述了在linux系统中搭建一个minio文件服务器,那么这一篇则用来整合java代码中使用,我之前自己已经搭建好了一个springboot项目,那么这一篇将详细讲述如何把minio整合进s ...
- 【FLASK】使用ORM以及类似于Django更新新增字段
#!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy.ext.declarative import declarative_base ...
- 过万 star 高星项目的秘密——GitHub 热点速览 Vol.39
作者:HelloGitHub-小鱼干 虽然国外十一并不过国庆,但是本周的 GitHub 也稍显疲软,GitHub 周榜的获 star 超过 1k 的项目寥寥无几,本周新开源的项目更是屈指可数.用 C ...