django之模板系统 --》内容(filter过滤器、tags标签【for、if、with】、母板以及继承、crf_token、注释、组件、静态文件【load static】、get_static_prefix、自定义标签和tag)
常用:
Django模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作。
变量
{{ 变量名 }} 变量名由字母数字和下划线组成。 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。
注意:当模板系统遇到一个(.)时,会按照如下的顺序去查询:
- 在字典中查询,比如下图的items
- 属性或者方法,先找属性再找方法:例如下图的dream
- 数字索引
例子
Filters过滤器
方法: | 说明 |
{{ value|default:"nothing"}} |
如果value值没传的话就显示nothing |
{{ value|filesizeformat }} |
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等) |
{{ value|add:"2" }} |
value是数字4,则输出结果为6。相加的意思,如何两者都是列表,则进行拼接 |
{{ value|lower }} |
变成小写 |
{{ value|upper}} |
变成大写 |
{{ value|length }} | 返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4. |
{{value|slice:"2:-1"}} |
切片 |
{{ value|first }} |
取第一个元素 |
{{ value|last }} |
取最后一个元素 |
{{ value|join:" // " }} |
使用指定字符串拼接 |
{{ value|truncatechars:9}} |
截断的字符串将以可翻译的省略号序列(“...”)结尾。它的数字等于你要显示的长度+3 |
{{ value|date:"Y-m-d H:i:s"}} |
日期格式化,也可以设置settings里面: USE_L10N=False DATETIME_FORMAT='Y-m-d H:m:s' |
{{ value|safe}} |
如果有html标签就会转化 |
{{value|truncatewrods:2}} | 截断的字符串只显示两个单词 |
下面看看例子截图:
对于在网页中输入带有html标签的页面,除了在.html的模板文件中使用{{value|safe}}之外,还有其他方式 mark_safe
在自定义的标签中 my_filter_tag.py
from django import template
from django.utils.safestring import mark_safe
register=template.Library() @register.filter
def link_tag(href):
# return mark_safe("<a href=/%s>click</a>"% href) #访问路径变成 http://127.0.0.1:8000/www.baidu.com
return mark_safe("<a href=%s>click</a>" % href) #变成 http://127.0.0.1:8000/index/www.baidu.com
在模板文件中使用
<p>{% load my_filter_tag %}</p>
<p>{{ "www.baidu.com"|link_tag }}</p> #根据上面的两种方式,他们的结果不一样
Tags:标签
for##############################
for ... empty:有数据就显示,没有就显示empty下面的东西
for遍历字典的情况
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %}
循环序号可以通过{{forloop}}显示
forloop.counter 从1开始计数
forloop.counter0 从0开始基数
forloop.revcounter 倒序到1结束
forloop.revcounter0 倒序到0结束
forloop.first 是一个布尔值,如果该迭代是第一次执行,那么它被置为True
forloop.last 是一个布尔值,如果该迭代是最后一次执行,那么它被置为True
forloop说明
forloop例子
<p>
{% for key,val in female_star.items %}
<span>序号:{{ forloop.counter }} {{ key }}:{{ val }}</span><br/>
{% endfor %}
</p>
if#####################################
{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
例如:未登录时显示登陆和注册,登陆时显示 注销和修改密码
<div>
{% if login_user %}
<p>{{ login_user.name }}</p>
<a href="">注销</a>
<a href="">修改密码</a>
{% else %}
<a href="">登陆</a>
<a href="">注册</a>
{% endif %}
</div>
with##########################################
with用来定义一个中间变量
例如
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
母板以及继承
当一个模板的页面和另外一个几乎相同时,可以考虑使用母板
如果在母模块的block里面有内容呢,那么,子模板想使用时可以使用:{{block.super}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>this is a test</p>
{% block content %}
<h1>母模板内容1</h1>
<h3>母模板内容2</h3>
{% endblock %}
</body>
</html>
index.html
下面时子模板调用
{% extends 'index.html' %} {% block content %}
<p>子模板的内容</p>
{{ block.super }}
{% endblock %}
son.html
crf_token
这个标签用于跨站请求伪造保护。 在页面的form表单里面写上{% csrf_token %} 还记得settings里面的设置吗有一句话注释掉了,
'django.middleware.csrf.CsrfViewMiddleware',
如果不注释,提交表单的时候报错如下截图
如何解决呢,加入{% csrf_token %}
效果:在form表单中加入一个隐藏的input标签,name="csrfmiddlewaretoken" value是64位长度的字符串,就可以提交post请求了
注释:
{# ... #}
组件:将一个页面当成一个独立的部分传给其他页面
使用方法:
{% include 'nav.html' %}
例如:
静态文件相关:使用{% load static %}来灵活配置
在settings里面有个静态文件的设置
STATIC_URL = '/static/' #如果这个名称改了,后面的路径就有问题了,那么怎么去灵活修改呢,即使static改成 static111,后面的都不要修改了
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static'),
格式如下:
{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
使用
{% load static %} #在顶端加载
<script src="{% static "mytest.js" %}"></script> 在相关位置处使用
多处使用可以设置个名称
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>
get_static_prefix:打印静态文件的前缀
例如:
自定义tag : simple_tag 注意:要重启project
自定义标签要注意几个地方:
1 在app01目录下建的目录必须是 templatetags
2 在templatetags下面建的可以是任意名称的.py 文件
3 在这个py文件中导入模块,并实例化,并且在函数上面使用 register.simple_tag
from django import template
@register.simple_tag
4 在模板 html文件中使用时 {% load 标签名 %},然后使用例如:{% 函数名 "参数1" "参数2" ... %}
自定义过滤器:大致和标签类似
区别:
py文件中:
from django import template
register=template.Library() @register.filter
def multi_filter(x,y): return x*y
在.html文件中使用
{% load my_filter_tag %} #my_filter_tag是py文件名
<p>{{ num|multi_filter:5 }}</p>
自定义标签和自定义过滤器的区别: 1. 标签,是为了做一些功能。过滤器,是对斜杠前面的数据做过滤。 2. 标签可以写任意个形参,而过滤器最大只能写2个形参。如果过滤器需要接收多个参数,需要将参数存放在列表,元组,字典等数据中。 3. 过滤器可以用在if等语句后,标签不可以
自定义标签和自定义过滤器的混合使用
inclusion_tag:自定义带有html的代码片段,这里就不在讲解
django之模板系统 --》内容(filter过滤器、tags标签【for、if、with】、母板以及继承、crf_token、注释、组件、静态文件【load static】、get_static_prefix、自定义标签和tag)的更多相关文章
- 【Django】模板系统
目录 一.变量 二.过滤器 Filters 2. length 3. filesizeformat 4. slice 5. add 6. first.last 7. join 8. truncatec ...
- 第四章:Django 的模板系统(转)
在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的. 这种做法会导致这些问题: 要做任何设计上的更改就必须改写 Python 代 ...
- Django 基础 模板系统
Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {% %} 'b', 'c', 'd']的话,就显示4. filesizeformat 将值格式化为一个 “人类可读的” 文件尺寸 ( ...
- python学习笔记--Django入门二 Django 的模板系统
为了使网站更干净简洁更容易维护,页面的设计和Python的代码必须分离开.我们可以使用Django的 模板系统 (Template System)来实现这种模式. 几个简单的模板标签(tag): ...
- Django框架-模板系统
来看一段代码 def current_datetime(request): now = datetime.datetime.now() html = "<html><bod ...
- Django:模板系统
一,常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二,常量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊 ...
- Django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag
Tags for <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} &l ...
- Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)
Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...
- python Tags 母板 组件 静态文件相关 自定义simpletag inclusion_tag
一.Tags(一)for 1.基本用法 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% e ...
- django 设置静态文件,static
django 设置静态文件,static 一.搜集静态文件 1.1 命令行查看 collectstatic guoguos-MacBook-Pro:mysite guoguo$ python mana ...
随机推荐
- 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
问题 rds_content = "{}, 执行了变更,sql语句:{}".format(ExecuteTime, sqls) 'ascii' codec can't encode ...
- 用Shell判断字符串包含关系的方法小结
这篇文章主要给大家介绍了关于用Shell判断字符串包含关系的几种方法,其中包括利用grep查找.利用字符串运算符.利用通配符.利用case in 语句以及利用替换等方法,每个方法都给出了详细的示例代 ...
- 利用JavaFx开发RIA桌面应用-事件监听
1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...
- InfluxDB HTTP API reference
InfluxDB HTTP API reference API地址:https://docs.influxdata.com/influxdb/v1.6/tools/api/ The InfluxDB ...
- WPF DataGrid添加编号列
WPF DataGrid添加编号列? 第一步:<DataGridTemplateColumn Header="编号" Width="50" MinWidt ...
- WebGL和ThreeJs学习5--ThreeJS基本功能控件
Threejs 2017年6月6日 15:06 Stats: new Stats();性能监视器,性能测试的方法,引入 Stats.js http://www.hewebgl.com ...
- vc++获取网页源码之使用类型库(TypeLib)生成包装类
1.在MFC项目名称上 右击->添加->选择Visual C++下的MFC->TypeLib中的MFC类->添加 可以从注册表表中共或是文件中根据相应的接口生成对应的包装类 效 ...
- 查看php-fpm开启的进程数以及每个进程的内存限制
查看php-fpm开启的进程数以及每个进程的内存限制 1.通过命令查看服务器上一共开了多少的 php-cgi 进程 ps -fe |grep "php-fpm"|grep &qu ...
- 自动化 数据分离 --A文件里面的类 中的函数 调用 B文件里面类 的函数 的方法
记录: bb 要实例化 self.dr=dr,那么 iber_test类的 self.dr 才能带过去
- HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法
爬虫多次访问同一个网站一段时间后会出现错误 HTTPConnectionPool(host:XX)Max retries exceeded with url '<requests.package ...