一般的变量之类的用 {{ }}(变量),功能类的,比如循环,条件判断是用 {% %}
1.接受显示视图函数传过来的字符串
# -*- coding: utf-8 -*-
from django.shortcuts import render
def home(request):
string = u"我在自强学堂学习Django,用它来建网站"
return render(request, 'home.html', {'string': string})
前端用{{ string }}去接受
2.接受显示视图函数传过来的列表
def home(request):
TutorialList = ["HTML", "CSS", "jQuery", "Python", "Django"]
return render(request, 'home.html', {'TutorialList': TutorialList})
```前端用for迭代取出内容
教程列表:
<div class="se-preview-section-delimiter"></div>
{% for i in TutorialList %}
{{ i }}
{% endfor %}
“`
{% for i in TutorialList %}
{{ i }}
{% endfor %}
3.接受显示视图函数传过来的字典
def home(request):
info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'}
return render(request, 'home.html', {'info_dict': info_dict})
在模板中取字典的键是用点info_dict.site,而不是Python中的 info_dict[‘site’]:
站点{{ info_dict.site }} 内容:{{ info_dict.content }}
还可以这样遍历字典:
{% for key, value in info_dict.items %}
{{ key }}:{{ value }}
{% endfor %}
4.在模板进行 条件判断和 for 循环的详细操作
发个list给前端
def home(request):
List = map(str, range(100))# 一个长度为100的 List
return render(request, 'home.html', {'List': List})
前端用逗号把取出来的元素分隔开
{% for item in List %}
{{ item }},
{% endfor %}
最后还多个逗号,咱们要通过判断遍历到最后了把它去掉,咋搞?用forloop.last变量判断下,如果为真就到最后一个了
{% for item in List %}
{{item}}{% if not forloop.last %},{% endif %}
{% endif %}
在for循环中还有很多有用的东西
变量 描述
forloop.counter 索引从 1 开始算
forloop.counter0 索引从 0 开始算
forloop.revcounter 索引从最大长度到 1
forloop.revcounter0 索引从最大长度到 0
forloop.first 当遍历的元素为第一项时为真
forloop.last 当遍历的元素为最后一项时为真
forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop
当列表中可能为空值的时候用 for empty
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>抱歉,列表为空</>
{% endfor %}
</ul>
5.模板上得到视图对应的网址
用{% url ‘add’ 4 5 %}
# views.py
def add(request, a, b):
c = int(a) + int(b)
return HttpResponse(str(c))
# urls.py
urlpatterns = patterns('',
url(r'^add/(\d+)/(\d+)/$', 'app.views.add', name='add'),
)
# template html
{% url 'add' 4 5 %}
还可以使用 as 语句将内容取别名(相当于定义一个变量),多次使用(但视图名称到网址转换只进行了一次)
{% url ‘some-url-name’ arg arg2 as the_url %}
链接到: {{ the_url }}
6.模板中的逻辑操作
==, !=, >=, <=, >, < 这些比较都可以在模板中使用,
and, or, not, in, not in 也可以在模板中使用,但是比较符号前后必须有至少一个空格
{% if var >= 90 %}
{% if num <= 100 and num >= 0 %}
7.模板中 获取当前网址,当前用户等
如果不是在 views.py 中用的 render 函数,是 render_to_response 的话,需要将 request 加入到 上下文渲染器
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
然后再加上 django.core.context_processors.request
TEMPLATE_CONTEXT_PROCESSORS = (
...
"django.core.context_processors.request",
...
)
然后在 模板中我们就可以用 request 了。一般情况下,推荐用 render 而不是用 render_to_response
获取当前用户
{{ request.user }}
判断登陆没登陆
{% if request.user.is_authenticated %}
{{ request.user.username }},您好!
{% else %}
还没登陆呢啥也看不了
{% endif %}
获取当前网址
{{ request.path }}
获取当前的GET参数
{{ request.GET.urlencode }}
合并到一起用的一个例子
比如我们可以判断 delete 参数是不是 1 来删除当前的页面内容。
推荐学习: http://code.ziqiangxuetang.com/django/django-template2.html