【Django05】模板进阶

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

1.列表,字典,类的实例的使用

2.循环:迭代显示列表,字典等中的内容

3.条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问,给出不一样的代码。

4.标签:for,if 这样的功能都是标签。

5.过滤器:管道符号后面的功能,比如{{ var|length }},求变量长度的 length 就是一个过滤器。

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

显示一个基本的字符串在网页上

#views.py

from django.shortcuts import render

def home(request):
    string = u'CSDN-专业IT技术社区'
    return render(request,'home.html',{'string':string})

#home.html
{{ string }}

在这里插入图片描述

for循环和list内容

#views.py 

from django.shortcuts import render

def home(request):
    Universities = ['JHU','Princeton','Harvard','UCB','UCLA','Yale']
    return render(request,'home.html',{'U' : Universities})

#home.html

<!DOCTYPE html>

海外知名高校巡礼:<br>
{% for u in U %}
{{ u }}<br>
{% endfor %}

一般的变量使用{{ }}(变量),功能类(如循环、条件判断)使用{% %}(标签)
在这里插入图片描述

显示字典中的内容

#views.py
from django.shortcuts import render

def home(request):
    infomation = [{'name':'Xu Huan','age':21,'major':'CS'},
                  {'name':'He shi','age':20,'major':'CS'},
                  {'name':'Zheng Juntai','age':21,'major':'CS'}]
    return render(request,'home.html',{'information' : infomation})

#home.html
<!DOCTYPE html>

{% for i in information%}
name:{{ i.name }}
age:{{ i.age }}
major:{{ i.major}}
<br>
{% endfor %}

在这里插入图片描述

在模板中进行条件判断和for循环

#views.py
from django.shortcuts import render

def home(request):
    list = map(str, range(100))
    return render(request,'home.html',{'list':list})

#home.html
<!DOCTYPE html>

{% for i in list %}
{{ i }} {% if not forloop.last %},{% endif %}
{% endfor %}

在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>抱歉,列表为空</li>
{% endfor %}
</ul>

在这里插入图片描述

模板上得到视图对应的网址

#views.py

from django.http import HttpResponse

def add(request,a,b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

#urls.py

path('add/<int:a>/<int:b>',app_test_views.add,name='add')

#add.html

{% url 'add' 4 5 %}
#修改urls.py成

path('pig/<int:a>/<int:b>',app_test_views.add,name='add')

#这时不需要再修改模板,再次访问时网址就会自动变成pig/4/5

在这里插入图片描述

模板中的逻辑操作

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

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

#urls.py中添加

path('verify/<str:a>',app_test_views.verify,name='verify'),

#views.py中添加

def verify(request,a):
    return render(request,'verify.html',{'a':a})

#verify.html

<!DOCTYPE html>

{% if a == 'JHU' %}
Welcome to The Johns Hopkins University!
{% elif a == 'UCB' %}
Welcome to University of California Berkeley!
{% elif a == 'Harvard' %}
Welcome to Harvard University!
{% else %}
Sorry, we don't know what you say~
{% endif %}

在这里插入图片描述

模板中 获取当前网址,当前用户

#修改settings.py

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

#使得可以在模板中使用request
#获取当前用户
{{ request.user }}

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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cs_xuhuan/article/details/82904387