常用:

Django模板中只需要记两种特殊符号:

{{  }}和 {% %}

{{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作。

变量

{{ 变量名 }}

变量名由字母数字和下划线组成。

点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。

注意:当模板系统遇到一个(.)时,会按照如下的顺序去查询:

  1. 在字典中查询,比如下图的items
  2. 属性或者方法,先找属性再找方法:例如下图的dream
  3. 数字索引
 

例子

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)的更多相关文章

  1. 【Django】模板系统

    目录 一.变量 二.过滤器 Filters 2. length 3. filesizeformat 4. slice 5. add 6. first.last 7. join 8. truncatec ...

  2. 第四章:Django 的模板系统(转)

    在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的.     这种做法会导致这些问题:     要做任何设计上的更改就必须改写 Python 代 ...

  3. Django 基础 模板系统

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {% %} 'b', 'c', 'd']的话,就显示4. filesizeformat 将值格式化为一个 “人类可读的” 文件尺寸 ( ...

  4. python学习笔记--Django入门二 Django 的模板系统

    为了使网站更干净简洁更容易维护,页面的设计和Python的代码必须分离开.我们可以使用Django的 模板系统 (Template System)来实现这种模式. 几个简单的模板标签(tag):   ...

  5. Django框架-模板系统

    来看一段代码 def current_datetime(request): now = datetime.datetime.now() html = "<html><bod ...

  6. Django:模板系统

    一,常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二,常量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊 ...

  7. Django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag

    Tags for <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} &l ...

  8. Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)

    Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...

  9. python Tags 母板 组件 静态文件相关 自定义simpletag inclusion_tag

    一.Tags(一)for 1.基本用法 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% e ...

  10. django 设置静态文件,static

    django 设置静态文件,static 一.搜集静态文件 1.1 命令行查看 collectstatic guoguos-MacBook-Pro:mysite guoguo$ python mana ...

随机推荐

  1. Typescript学习总结之泛型

    泛型: 参数化的类型,一般用来限制结合的内容 class Student { constructor(public name: string) { } say() { console.log(this ...

  2. S2算法应用

    需求:计算不同区域范围,X公里半径内实体店或场站覆盖率. 实现思路: 为了便于理解,将地球看成一个基于经纬度线的坐标系.将经度和纬度看成二维坐标系中的两个纬度,横轴表示经度[-180o, 0o),(0 ...

  3. sql日期操作

    日期格式化函数 ), ): :57AM ), ): ), ): ), ): ), ): ), ): ), ): ), ): , ), ): :: ), ): :::827AM ), ): ), ): ...

  4. delphi absolute 应用实例

    procedure TForm1.Button1Click(Sender: TObject); var i1,i2:Integer; b:..] of Byte absolute i1; // b 在 ...

  5. SQL 行列转置

    ),),[Score] int) Insert Class union all union all union all union all union all union all union all ...

  6. 容易掉坑的地方The value for the useBean class attribute XXX is invalid

    1.在编译 JSP 时,指定的 Bean 类没找到(没找到原因有多种所以复杂就在这里,比如文件名是否写错,包名是否写错,<jsp:useBean  class="路径"> ...

  7. C++进阶--静态多态

    //############################################################################ /* * 多态 */ // 常见的动态多态 ...

  8. live555峰哥的私房菜(二)-----计划任务(TaskScheduler)探讨

    计划任务(TaskScheduler)探讨 上一篇谈到SingleStep()函数会找到三种任务类型并执行之. 这三种任务是: socket handler, event handler, delay ...

  9. 廖雪峰Java1-4数组操作-5命令行参数

    adb和ideviceinstaller提供了许多参数供我们使用.命令行参数提供了这样的入口,针对不同的参数执行不同的命令. 1.命令行参数 命令行参数是一个String[] 数组,由JVM接收用户输 ...

  10. 进程优先和ACL

    linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有 ...