昨天成功的搭建了django开发环境并进行了测试,然而简单的输出‘Hello World’对程序开发并没有实质性的帮助。今天我们在昨天的基础上来讲一讲django的模板应用,进一步加深对django的学习与理解。
1.创建templates文件夹,使用模板生成xhtml文件。
博主在Ubuntu16.10下使用Bluefish这款编辑器,该软件有强大的模板和联想功能,和windows下的Editplus有的一拼。
在blog/文件夹下创建templates文件夹,注意单词末尾有’s’才能被django识别。
》cd blog
》mkdir templates
之后我们使用bluefish的xhtml1.0模板在templates下生成index1.html,区别index.html。html代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>{{title}}</title>
</head>
<body>
<h1>hello {{user}}</h1>
</body>
</html>
生成完成之后,我们修改blog/下的views.py让它使用我们刚刚生成的index1.html。
from django.shortcuts import render_to_response
def index(req):
return render_to_response('index1.html',{'title':'my page','user':'Franky'}
这里我们使用字典在django的模板中填充数据,在根目录调用
python3 manage.py runserver
运行后出现如下效果:
2.进阶1-使用对象填充模板
上面的操作弱爆了,传个字符和姓名在网页上并没有用,在这里我们尝试写个简单的对象,使用该对象填充模板。
- 在blog/views.py里创建对象,使用该对象填充字典
from django.shortcuts import render_to_response
def index(req):
user = {'name':'hepeng','gender':'male','age':'23'}
return render_to_response('index1.html',{'title':'my page','user':user})
- 在blog/templates/index1.html里设置对应的位置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>{{title}}</title>
</head>
<body>
<h1>hello {{user.name}}</h1>
<h1>your sex is {{user.gender}}</h1>
<h1>your age is {{user.age}}</h1>
</body>
</html>
- 运行结果如下图所示:
3.进阶2-使用类生成对象填充字典
- 修改后的blog/views.py代码如下
from django.shortcuts import render_to_response
class Person(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.gender = sex
def index(req):
#user = {'name':'hepeng','gender':'male','age':'23'}
user = Person('Franky',23,'male')
return render_to_response('index1.html',{'title':'my page','user':user})
- 运行结果和上图中的大致相同,只是name一行变成了Franky,此处不在截图。
4.进阶3-传递列表
话不多说,直接放码过来。
- blog/views.py代码如下
from django.shortcuts import render_to_response
lang_list = ['python','C++','java','go','c#']
def index(req):
return render_to_response('index1.html',{'title':'my page','list':lang_list}
- blog/templates/index1.html代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>{{title}}</title>
</head>
<body>
<li>{{list.0}}</li>
<li>{{list.1}}</li>
<li>{{list.2}}</li>
<li>{{list.3}}</li>
<li>{{list.4}}</li>
</body>
</html>
- 运行效果如下如所示:
5.进阶4.调用传递对象的方法
我们传入一个user对象,调用user对象中的say方法完成输出。参考代码如下:
from django.shortcuts import render_to_response
class Person(object):
def __init__(self,name):
self.name = name
def say(self):
return 'I\'am '+ self.name
def index(req):
user = Person('hepeng')
return render_to_response('index1.html',{'title':'my page','user':user})
<body>
<h1>{{user.say}}</h1>
</body>
程序比较简单,运行结果就不在这里截图了。