django模板语法

Posted chenwenyin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django模板语法相关的知识,希望对你有一定的参考价值。

  • 变量
  • 列表
  • 字典
  • 过滤器
  • if/else 标签
  • for 标签
  • ifequal/ifnotequal 标签
  • 注释标签
  • include 标签
  • 模板继承

变量

## view.py
from django.shortcuts import render

def foo(request):
  views_name = "xxx"
  return  render(request,"index.html", {"name":views_name})

## index.html
<p>{{ name }}</p>

列表

## view.py
from django.shortcuts import render

def foo(request):
    views_list = ["xxx","123","egon"]
    return render(request, "index.html", {"views_list": views_list})

## index.html
"""
可以用 . 索引下标取出对应的元素
"""
<p>{{ views_list }}</p>   # 取出整个列表
<p>{{ views_list.0 }}</p> # 取出列表的第一个元素

字典

## view.py
from django.shortcuts import render

def foo(request):
    views_dict = {"name":"xxx", "age":18}
    return render(request, "index.html", {"views_dict": views_dict})

## index.html
"""
可以用 .键 取出对应的值
"""
<p>{{ views_dict }}</p> # 取出整个字典
<p>{{ views_dict.name }}</p> # 取出name的值

过滤器


# 基本语法
{{ 变量名 | 过滤器:可选参数 }}

"""
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符

{{ name|lower }}

{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。

------------------------------------------------------------------------------

过滤管道可以被套接,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:

{{ my_list|first|upper }}

以上实例将第一个元素并将其转化为大写。
"""

# 带参数的过滤器
"""
{{ bio|truncatewords:"30" }}
这个将显示变量 bio 的前30个词
"""

# default
"""
default 为变量提供一个默认值。
如果 views 传的变量的布尔值是 false,则使用指定的默认值。

{{ value|default:"nothing"}}
"""

# length
"""
返回对象的长度,适用于字符串和列表
字典返回的是键值对的数量,集合返回的是去重后的长度
"""
## view.py
from django.shortcuts import render

def foo(request):
    name ="菜鸟教程"
    return render(request, "index.html", {"name": name})

## index.html
{{ name|length}}


# filesizeformat
"""
以更易读的方式显示文件的大小(即‘13 KB‘, ‘4.1 MB‘, ‘102 bytes‘等)

{{ value|filesizeformat}}

列如 value 是 123456789,输出将会是 117.7 MB。
"""

# date
"""
根据给定格式对一个日期变量进行格式化。
格式 Y-m-d H:i:s 返回 年-月-日 小时:分钟:秒 的格式时间
"""
## view.py
from django.shortcuts import render

def foo(request):
    import datetime
    now  =datetime.datetime.now()
    return render(request, "index.html", {"time": now})

## index.html
{{ time|date:"Y-m-d" }}


# truncatechars
"""
如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。
截断的字符串将以 ... 结尾。

{{ value|truncatechars:9}}
"""

# safe
"""
Django的模板中会对HTML标签和JS等语法标签进行自动转义,这样是为了安全,防止xss攻击。如果不想用转义,就使用safe。

{{ value|safe }}
"""

# upper、lower
"""
转大写和转小写
"""

if/else 标签

# 基本语法
"""
{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

{% if %} 标签接受 and, or 或者 not 关键字来对多个变量做判断, 或者对变量取反( not )
"""

## view.py
from django.shortcuts import render

def foo(request):
    views_num = 88
    return render(request, "index.html", {"num": views_num})

## index.html
{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
一边玩去~
{% endif %}

for 标签

# 基本遍历
{% for i in views_list %}
{{ i }}
{% endfor %}

# 反向遍历
{% for athlete in athlete_list reversed %}
...
{% endfor %}

# 遍历字典
{% for key,val in dic.items %}
    <p>{{ key }}:{{ val }}</p>
{% endfor %}

# {% empty %}
"""
for标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作
"""
{% for person in person_list %}
    <p>{{ person.name }}</p>

{% empty %}
    <p>sorry,no person here</p>
{% endfor %}

ifequal/ifnotequal 标签

"""
{% ifequal %} 标签比较两个值是否相等
{% ifnotequal %} 标签比较两个值是否不相等
"""
{% ifequal section ‘sitenews‘ %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

注释标签

## Django 注释使用 {# #}

{# 这是一个注释 #}

include 标签

"""
{% include %} 标签允许在模板中包含其它的模板的内容。
"""

{% include "nav.html" %}

模板继承

"""
模板可以用继承的方式来实现复用
"""
## base.html 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p>菜鸟教程 Django 测试。</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>

"""
以上代码中,名为 mainbody 的 block 标签是可以被继承者们替换掉的部分。
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
"""

## index.html 中继承 base.html,并替换特定 block
{%extends "base.html" %}

{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

"""
第一行代码说明 index.html 继承了 base.html 文件。后面相同名字的 block 标签用以替换 base.html 的相应 block。
注意:!!!如果你在模版中使用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。
"""

以上是关于django模板语法的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 片段在 Django 模板中不起作用

每当我将 Python 代码放入 Django 模板时都会出现语法错误

django 源码模板的语法符号的使用

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

django模板语法

Django 模板过滤器语法错误