Django 模版 各种实用方法

来源:互联网 发布:lol for mac 编辑:程序博客网 时间:2024/06/05 09:52

一般的变量之类的用 {{ }}(变量),功能类的,比如循环,条件判断是用 {% %}

1.接受显示视图函数传过来的字符串

# -*- coding: utf-8 -*-from django.shortcuts import renderdef 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.pydef add(request, a, b):    c = int(a) + int(b)    return HttpResponse(str(c))# urls.pyurlpatterns = 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

比如我们可以判断 delete 参数是不是 1 来删除当前的页面内容。

推荐学习: http://code.ziqiangxuetang.com/django/django-template2.html

原创粉丝点击