## 变量和索引
~~~
{{ 变量名 }}
{{ info_dict.site }} key使用点进行索引 info_dict.items info_dict.keys info_dict.values
{{ info_list.0 }} 使用点运算进行索引
~~~
---
## 逻辑运算
模板中的逻辑操作
```
# 这些比较都可以在模板中使用,比如
==, !=, >=, <=, >, < :
and, or, not, in, not in
```
>[danger] 注意:比较符号前后必须有至少一个空格!
## 标签
```
# 对模板中的block标签进行填充
{% extends 'template.html' %}
# 导入html代码
{% include 'template.html' %}
{% block title %}默认值或者替换值{% endblock %}
```
## for循环
```
{% for item in list %}
{{ item }}
{% endfor %}
```
#### empty
```
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>抱歉,列表为空</li>
{% endfor %}
```
### for循环中的变量
```
forloop.counter # 索引从 1 开始算
forloop.counter0 # 索引从 0 开始算
forloop.revcounter # 索引从最大长度到 1
forloop.revcounter0 # 索引从最大长度到 0
forloop.first # 当遍历的元素为第一项时为真
forloop.last # 当遍历的元素为最后一项时为真
forloop.parentloop # 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop
```
## if判断
```
{% if 判断 %}
{% else %}
{% endif %}
```
## url
```
<a href="{% url 'add' 4 5 %}">URL</a>
```
还可以使用 as 语句将内容取别名(相当于定义一个变量),多次使用(但视图名称到网址转换只进行了一次)
```
{% url 'some-url-name' arg arg2 as the_url %}
<a href="{{ the_url }}">链接到:{{ the_url }}</a>
```
## 模板中 获取当前网址,当前用户
如果不是在 views.py 中用的 render 函数,是 render_to_response 的话,需要将 request 加入到 上下文渲染器(点击查看详细)
### Django 1.7 及以前 修改 settings.py
如果没有 TEMPLATE_CONTEXT_PROCESSORS 请自行添加下列默认值,是否缺少最后一行。
```
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
)
```
然后在 模板中我们就可以用 request 了。
### Django 1.8 及以后 修改 settings.py
```
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
```
#### 获取当前用户
```
{{ request.user }}
```
如果登陆就显示内容,不登陆就不显示内容:
```
{% if request.user.is_authenticated %}
{{ request.user.username }},您好!
{% else %}
请登陆,这里放登陆链接
{% endif %}
```
#### 获取当前网址
```
{{ request.path }}
```
或者
```
{{ request.path_info }}
```
#### 获取当前 GET 参数
```
{{ request.GET.urlencode }}
```
### 合并到一起用的一个例子
~~~
<a href="{{ request.path }}?{{ request.GET.urlencode }}&delete=1">当前网址加参数 delete</a>
~~~