本节主要讲 Django模板中的循环,条件判断,常用的标签,过滤器的使用。
- 列表,字典,类的实例的使用
- 循环:迭代显示列表,字典等中的内容
- 条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问,给出不一样的代码。
- 标签:for,if 这样的功能都是标签。
- 过滤器:管道符号后面的功能,比如{{ var|length }},求变量长度的 length 就是一个过滤器。
其实,用户访问URL到显示内容到网页上,基本流程是:在url.py先登记 要访问的是哪个视图的函数,然后在view.py里面定义函数内容,再根据函数去模板找到对应的字段,填充数据,然后渲染到网页。
home.html内容如下:
一般的变量之类的用 {{ }}(变量),功能类的,比如循环,条件判断是用 {% %}(标签)
{% extends 'base.html' %}
{% block title %}
欢迎光临首页
{% endblock %}
{% block content %}
{% include 'ad.html' %}
<h3>这里"http://127.0.0.1:8000/home/"访问后得到的网页内容</h3>
<!--home2-->
<p>home2</p>
{{ string }}
<!--home3-->
<p>home3</p>
{% for i in TutorialList %}
<li> {{ i }} </li>
<br>
{% endfor %}<!--#for 循环要有一个结束标记-->
<!--home4-->
<p>home4</p>
站点:{{ info_dict.site }} 内容:{{ info_dict.content }}
<br>
{% for key, value in info_dict.items %}
{{ key }}: {{ value }}
{% endfor %}
<!--home5-->
<p>home5 带逗号结尾</p>
{% for item in List %}
{{ item }},
{% endfor %}
<p>home6 不带逗号结尾</p>
<!--用变量 forloop.last 这个变量,如果是最后一项其为真,否则为假,更改如下: -->
{% for item in List2 %}
{{ item }}{% if not forloop.last %},{% endif %}
{% endfor %}
<p>home7 遍历list输出其中某个字段</p>
<!--当列表中可能为空值时用 for empty-->
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>抱歉,列表为空</li>
{% endfor %}
</ul>
{% endblock %}
对于模板的嵌套不是很理解的,建议先看一下:https://blog.csdn.net/hellokandy/article/details/90644532
在for循环中还有很多有用的东西,如下:
views.py内容如下:
# coding:utf-8
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
return HttpResponse(u"<h1> Django test! <h1>")
def add(request):
a = request.GET['a']
b = request.GET['b']
c = request.GET.get('c', 0) #推荐写法,当没有传递c 的时候默认c 为 0
ret = int(a) + int(b) + int(c)
return HttpResponse("a+b+c= " + str(ret))
def add2(request, a, b):
c = int(a) + int(b)
return HttpResponse("add2: a+b= " + str(c))
def home(request):
return render(request, 'home.html')
'''实例一,显示一个基本的字符串在网页上'''
def home2(request):
string = u"欢迎使用django搭建自己的网站!"
return render(request, 'home.html', {'string': string})
'''实例二,讲解了基本的 for 循环 和 List内容的显示'''
def home3(request):
TutorialList = ["HTML", "CSS", "jQuery", "Python", "Django"]
return render(request, 'home.html', {'TutorialList': TutorialList})
'''实例三,显示字典中内容:'''
def home4(request):
info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'}
return render(request, 'home.html', {'info_dict': info_dict})
'''实例四,在模板进行 条件判断和 for 循环的详细操作:'''
def home5(request):
List = map(str, range(20))# 一个长度为20的 List
return render(request, 'home.html', {'List': List})
'''实例五,在模板进行 条件判断和 for 循环的详细操作:'''
def home6(request):
List = map(str, range(20))# 一个长度为20的 List
return render(request, 'home.html', {'List2': List})
'''实例六,在模板进行 条件判断和 for 循环的详细操作:'''
def home7(request):
athlete_list = [
{'name': u'kandy', 'content': u'各种IT技术教程'},
{'name': u'', 'content': u'各种IT技术教程'},
{'name': u'chen', 'content': u'各种IT技术教程'},
{'name': u'zoory', 'content': u'各种IT技术教程'},
{'name': u'hannah', 'content': u'各种IT技术教程'}
]
return render(request, 'home.html', {'athlete_list': athlete_list})
url.py内容如下:
from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
from learn import views as learn_views # add
urlpatterns = [
path('home/', learn_views.home, name='home'),
path('home2/', learn_views.home2, name='home2'),
path('home3/', learn_views.home3, name='home3'),
path('home4/', learn_views.home4, name='home4'),
path('home5/', learn_views.home5, name='home5'),
path('home6/', learn_views.home6, name='home6'),
path('home7/', learn_views.home7, name='home7'),
path('', learn_views.index), # add
path('add/', learn_views.add, name='add'), # new
path('add/<int:a>/<int:b>/', learn_views.add2, name='add2'), # new + 1
path('admin/', admin.site.urls),
]
在浏览器输入:http://127.0.0.1:8000/home#
#:代表1-7,查看网页输出结果。