[Django系列]2.Django 的模板使用

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.pyALLOWED_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 #首先必须导入views
urlpatterns = [
    url(r'^book/(?<name>\w+)/$', views.bookname),
]
写一个视图函数bookname,默认传入一个变量bn,作为书名
from django.shortcuts import render,HttpResponsedef bookname(request,bn):
        return HttpResponse("hello books "+ bn +"!")

1.Template模板的使用

ddc@SERVER:~/djcode/day04/books$ vim views.py
    
#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponse
from django.template import Template,Context #首先需要导入Template,Context模块def bookname(request,bn):
        t=Template(u'<html><body><h1>欢迎进入{{book_name}}</h1></body></html>') #生成模板对象
        c=Context({'book_name':bn}) #生成上下文对象,这里,将变量以字典的方式,交给Context处理
        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
#-*- coding:utf-8 -*-
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 #导入render_to_string模块
def bookname(request,bn):
        html=render_to_string('index.html',{'book_name':bn}) #直接传参即可
        return HttpResponse(html)

4.render_to_response模块,使用该模块,就更加简单了

#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponse,render_to_response
def bookname(request,bn):
        return render_to_response('index.html',{'book_name':bn})

5.render模块

#-*- coding:utf-8 -*-
from django.shortcuts import render
def bookname(request,bn):
        return render(request,'index.html',{'book_name':bn})

总结:

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

赞(0)
未经允许不得转载:http://www.yueguangzu.net逗逗网 » [Django系列]2.Django 的模板使用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址