参考自1.6版本
1.变量
格式:{{ variable }}
.(点),下划线(_),和字母组成变量
如果是类似variable.variable
django会进行类似下面的寻找
- 字典
- 类属性
- 类方法
- 列表的索引
字典会优先于方法被判断
如果变量是不存在,默认为空白字符代替
bar在模板中会解析成字符串常量
2.过滤器
格式:{{ name|lower }}
过滤器是可以链式连接的,如{{ text|escape|linebreaks }}
过滤器也是可以带参数的,如{{ bio|truncatewords:30 }}
过滤器参数如果有空格必须引号加起来,如{{ list|join:", " }}
django提供了内置的过滤器参考这里
也可以自定义变量
3.标签
格式:{% tag %}
一些需要开始的tag和结束的tag,例如:{% tag %} ... tag contents ... {% endtag %}
django提供了内置的标签参考
列一些常用的tag
for循环
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
条件判断
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
在if语句中可以加入过滤器和操作符
也可以自定义tag
4.注释
格式:{# comment #}
这个只能单行注释,如果需要多行注释,需要使用comment tag
5.模板继承
父模板:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
子模版:
{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
如果在模板中使用了{% extends %}
如果需要使用父模板中的block中的内容可以使用{{ block.super }}
模板的tag不要重名
django默认加入了 auto-escaping 防止XSS
取消的话,针对变量可以加入safe,如{{variable|safe}}
django
区块的autoescape
{% autoescape off %}
Hello {{ name }}
{% endautoescape %}
django的方法在模板中是没有参数的
模板默认的字符串的值是不做autoscape的,这个控制有模板作者决定
如:
{{ data|default:"3 < 2" }}
{{ data|default:"3 < 2" }} {# Bad! Don't do this. #}
导入自定义的tag和filter
格式:{% load comments %}
笔记总结自django templates