官方文档:官方文档
{{ }}和 {% %}
注意事项:
- 如果计算结果的值是可调用的,它将被无参数的调用。 调用的结果将成为模版的值。
- 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为'' (空字符串) 。
- def template_test(request):
- l = [11, 22, 33]
- d = {"name": "alex"}
-
- class Person(object):
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- def dream(self):
- return "{} is dream...".format(self.name)
-
- Alex = Person(name="Alex", age=34)
- jason = Person(name="jason", age=9000)
- Eva_J = Person(name="Eva_J", age=18)
-
- person_list = [Alex, jason, Eva_J]
- return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})
- {# 取l中的第一个参数 #}
- {{ l.0 }}
- {# 取字典中key的值 #}
- {{ d.name }}
- {# 取对象的name属性 #}
- {{ person_list.0.name }}
- {# .操作只能调用不带参数的方法 #}
- {{ person_list.0.dream }}
注意事项:
- 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
- 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
- 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
- '|'左右没有空格没有空格没有空格
{{ value|default:"nothing"}}
'13 KB', '4.1 MB', '102 bytes', 等等)。例如:{{ value|filesizeformat }}
{{value|slice:"2:-1"}}
{{ value|date:"Y-m-d H:i:s"}}
{{ value|safe}}
{{ value|truncatechars:9}}
{{ value|cut:' ' }}
{{ blog_date|timesince:comment_date }}
- {% for user in user_list %}
-
- {{ user.name }}
- {% endfor %}
| Variable | Description |
|---|---|
forloop.counter | 当前循环的索引值(从1开始) |
forloop.counter0 | 当前循环的索引值(从0开始) |
forloop.revcounter | 当前循环的倒序索引值(从1开始) |
forloop.revcounter0 | 当前循环的倒序索引值(从0开始) |
forloop.first | 当前循环是不是第一次循环(布尔值) |
forloop.last | 当前循环是不是最后一次循环(布尔值) |
forloop.parentloop | 本层循环的外层循环 |
- # for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
- {% for person in person_list %}
-
{{ person.name }}
-
- {% empty %}
-
sorry,no person here
- {% endfor %}
if,elif和``else- {% if num > 100 or num < 0 %}
-
无效
- {% elif num > 80 and num < 100 %}
-
优秀
- {% else %}
-
凑活吧
- {% endif %}
- {% if user_list|length > 5 %}
- 七座豪华SUV
- {% else %}
- 黄包车
- {% endif %}
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
- {% with d.hobby.3.info as nb %}
-
{{ nb }}
- 在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
-
{{ d.hobby.3.info }}
- {% endwith %}
- {% with total=business.employees.count %}
- {{ total }} employee{{ total|pluralize }}
- {% endwith %}
- 不要写成as
- 语法:{% include '模版名称' %}
-
- 如:{% include 'adv.html' %}
- <div class="adv">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Panel titleh3>
- div>
- <div class="panel-body">
- Panel content
- div>
- div>
- <div class="panel panel-danger">
- <div class="panel-heading">
- <h3 class="panel-title">Panel titleh3>
- div>
- <div class="panel-body">
- Panel content
- div>
- div>
- <div class="panel panel-warning">
- <div class="panel-heading">
- <h3 class="panel-title">Panel titleh3>
- div>
- <div class="panel-body">
- Panel content
- div>
- div>
- div>
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Titletitle>
- <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
- {# <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">#}
- <style>
- * {
- margin: 0;
- padding: 0;
- }
-
- .header {
- height: 50px;
- width: 100%;
- background-color: #369;
- }
- style>
- head>
- <body>
- <div class="header">div>
-
- <div class="container">
- <div class="row">
- <div class="col-md-3">
- {% include 'adv.html' %}
-
-
- div>
- <div class="col-md-9">
- {% block conn %}
- <h1>你好h1>
- {% endblock %}
-
- div>
- div>
-
- div>
-
- body>
- html>
注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。
{% extends 'home.html' %}