Django 模板进阶

这节主要讲 Django 模板中的循环,条件判断,常用的标签,过滤器的使用

  • 列表,字典,类的实例
  • 循环,迭代显示列表,字典中的内容
  • 条件循环,判断是否有该内容,比如判断是手机访问还是电脑访问
  • 标签:for,if 这样的功能都是标签
  • 过滤器:管道符号后面的功能,比如{{var | length}},求变量长度的 length 就是一个过滤器

如果需要将一个或多个变量共享给多个网页或所有网页使用,比如在网页上显示来访者 ip ,这个用 Django 上下文渲染器来做

实例1:显示一个基本的字符串在网页上

view.py

# -*- coding: utf-8 -*-
from django.shortcuts import render
 
 
def home(request):
    string = u"我在自强学堂学习Django,用它来建网站"
    return render(request, 'home.html', {'string': string})

在视图中我们传递了一个字符串名称是 string 到模板 home.html

home.html

# 在模板中使用
{{ string }}

实例2:讲解基本的 for 循环和 list 内容显示

views.py

def home(request):
    Tutorialist = ["HTML","CSS","jQuery","Python","Django"]
    return render(requset,'home.html',{'Tutorialist':Tutorialist})

在视图中我们传递了一个 List 到模板 home.html

home.html

{%  for i in Tutorialist %}
{{ i }}
{% endfor %}

for 循环需要一个结束标记

简单总结一下,一般的变量之类的用 {{}},功能类的,比如循环,条件判断使用 {% %}

实例3:显示字典中内容

views.py

def home(request):
    info_dict = {'site':u'元素1','content':'元素2'}
    return render(request,'home.html',{'info_dict':info_dict})

home.html

{{ info_dict.site }}
{{ info_dict.content }}

在模板中取字典的键是 info_site.site 而不是 Python 中的 info_dict['site']

还可以遍历字典

{% for key,value in info_dict.items %}
    {{ key }}:{{ value }}
{% endfor %}

实例4:在模板进行条件判断和 for 循环的详细操作

view.py

def home(request):
    List = map(str,range(100)) # 一个长度为 100 的list
    return render(request,'home.html',{'List':List})

假如想用逗号把这些元素连接起来

home.html

{% for item in List %}
  {{ item }},
{% endfor %}

会发现在最后一个元素的后面也有一个逗号

forloop.last 这个变量,如果是最后一项则为真,否则为假

{% for item in List %}
  {{ item }}{% if not forloop.last %},{% endif %}
{% endfor %}

for 循环中还有很多有用的东西

变量 描述
forloop.conuter 索引从 1 开始计算
forloop.counter0 索引从 0 开始计算
forloop.revconter 索引从最大长度到 1
forloop.revconter0 索引从最大长度到 0
forloop.first 当遍历的元素的第一项为真
forloop.last 当遍历的元素为最后一项为真
forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

实例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 %}

实例6:模板中的逻辑操作

== , != , >= , <= , > , < 这些比较都可以在模板中使用,比如

{% if var >= 90 %}
good
{% elif var >= 80 %}
all right
{% else %}
work hard
{% endif %}

and,or,not,in,not in 也可以在模板中使用

# 判断 num 是不是在 0 到 100 之间
{% if num > 0 and num < 100 %}
right
{% else %}
wrong
{% endif %}

# 判断元素是不是在列表里
{% if a in list %}
right
{% endif %}

实例7:模板中获取当前网址,当前用户等

修改 setting.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'django.template.context_processors.request',
                ...
            ],
        },
    },
]

然后就可以在模板中使用 request 了

# 获取当前用户
{{ request.user }}

# 如果登陆就显示内容,不登陆就不显示内容:
{% if request.user.is_authenticated %}
    {{ request.user.username }},您好!
{% else %}
    请登陆,这里放登陆链接
{% endif %}

# 获取当前网址
{{ request.url }}

# 获取当前 GET 参数
{{ request.GET.urlencode }}

# 例子
<a href="{{ request.path }}?{{ request.GET.urlencode }}&delete=1"> 添加delete </a>
原文地址:https://www.cnblogs.com/andy-linux/p/6775006.html