Django可以渲染模板,内置5种使用模板的方法,接下来将各个击破.
新建项目day04,并新建应用books.
ddc@SERVER:~/djcode$ django-admin startproject day04
ddc@SERVER:~/djcode$ cd day04
ddc@SERVER:~/djcode/day04$ django-admin startapp books
ddc@SERVER:~/djcode/day04$ tree
.
├── books
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── day04
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
vim setttings.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'books',
]
增加一个路由,指向我们需要使用模板的视图函数bookname
from django.conf.urls import url
from django.contrib import admin
from books import views
urlpatterns = [
url(r'^book/(?<name>\w+)/$', views.bookname),
]
写一个视图函数bookname,默认传入一个变量bn,作为书名
from django.shortcuts import render,HttpResponse
def bookname(request,bn):
return HttpResponse("hello books "+ bn +"!")
1.Template模板的使用
ddc@SERVER:~/djcode/day04/books$ vim views.py
from django.shortcuts import render,HttpResponse
from django.template import Template,Context
def bookname(request,bn):
t=Template(u'<html><body><h1>欢迎进入{{book_name}}</h1></body></html>')
c=Context({'book_name':bn})
html=t.render(c)
return HttpResponse(html)

2.get_template模板的使用
要使用get_template模板,必须先定义一个html的模板,放在应用的templates文件夹下面,保存名为index.html
ddc@SERVER:~/djcode/day04/books$ mkdir templates
ddc@SERVER:~/djcode/day04/books$ cd templates/
ddc@SERVER:~/djcode/day04/books/templates$ vim index.html
</body>
<html>
<head>
<title>书籍阅览</title>
</head>
<body>
<h1>这里是使用模板,获取到的书名是:{{book_name}}!</h1>
</body>
</html>
有了模板文件后,就可以直接导入使用get_template模块了
ddc@SERVER:~/djcode/day04/books$ vim views.py
from django.shortcuts import render,HttpResponse
from django.template.loader import get_template
def bookname(request,bn):
t=get_template('index.html')
html=t.render({'book_name':bn})
return HttpResponse(html)

3.render_to_string模板
from django.shortcuts import render,HttpResponse
from django.template.loader import render_to_string
def bookname(request,bn):
html=render_to_string('index.html',{'book_name':bn})
return HttpResponse(html)

4.render_to_response模块,使用该模块,就更加简单了
from django.shortcuts import render,HttpResponse,render_to_response
def bookname(request,bn):
return render_to_response('index.html',{'book_name':bn})

5.render模块
from django.shortcuts import render
def bookname(request,bn):
return render(request,'index.html',{'book_name':bn})

总结:
综上所述,比较值得推荐的是使用render_to_response模块和render模块,前者兼容性更加,支持传入空的对象,后者则需要将request对象传入使用.两者均可以直接渲染html模板文件,不需要额外的模块承载.同时传参不在需要Context,直接传入字典参数即可,非常方便,值得推广.
最新评论