Python笔记(五)--Django中使用模板
2015-06-04 18:21
656 查看
使用Django开发网站时,如果不使用模板,那么将会很不合理。因为我们所有的html代码都需要被硬编码到我们的Python代码中。我们新建一个工程,然后再在新建一个应用程序,并在其中的views.py文件中添加如下代码:
从上面的代码中就可以看出,我们的HTML代码和我们的Python混合在一起了,这样不仅影响开发速度,也不便于后期维护。下面我会详细介绍django中的模板。模板的作用是要实现将HTML代码和Python代码分开。首先在我们应用程序下面新建一个templates文件夹,之后我们的所有模板都会放在这个文件夹下面,因为django1.6的setting.py文件中没有TEMPLATE_DIRS这个选项,取而代之的是它会默认去寻找template文件夹下面的模板。我们在这个文件夹下面新建一个html。这个html文件中主要是放一些我们页面不会变化或者很少变化的代码,而那些经常变化的代码我们使用{%block%}{%endblock%}进行申明,然后在子页面中可以对这部分代码进行覆盖。base.html代码如下:
上面代码中,我们使用模板标签将html的title,content,以及footer进行了占位。然后再新建一个current_datetime.html的页面继承我们的base.html页面,然后对其中的title,content部分进行覆盖,footer部分保留父页面base.html中的代码。代码如下:
这样使用之后,我们访问current_datetime.html页面的时候整体框架是base.html中所定义的,而局部效果回事我们current_datetime.html中所定义的。对于一个网站而言,我们可以定义尽可能多的{%block%},这样我们子页面继承的时候会有较好的扩展性。下面是视图views.py中所定义的函数代码:
上面的函数返回当前的时间,注释部分和没注释的代码效果是一样的。值得注意的是使用render_to_response函数时,其第一个参数必须是要使用模板的名称。第二个参数是可选的,如果你要给定这个参数,那么这个参数必须是为该模板创建Context时所使用的字典。如果不给定,函数将使用一个空字典。下面是应用程序中urls.py的代码:
urls.py是将我们视图views.py中的代码和我们之后访问页面在地址栏中所输入的地址进行绑定。url()中的第一个参数是一个正则表达式,第二个参数是我们要绑定的函数代码。配置好我们应用程序的urls.py之后,我们还需要在我们项目的urls.py中进行配置,具体如下:
在这里我们使用include将我们应用程序Second中的urls引入。并指定我们要访问页面的正则表达式。结合两个urls.py中正则表达式所描述的url,我们之后在访问页面的时候,路径应该是http://localhost:8000/Second/time/。这里端口8000是默认的。我们可以选择我们想要的端口号,但是前提是那个端口号没有被其它应用程序占用。最有我们在项目的setting.py将我们的应用程序进行注册。打开项目的setting.py,在INSTALLED_APPS中将我们应用程序的名字加入。如下:
然后我们启动服务,并访问localhost:8000/Second/time,可以看到下面的效果。
#coding=UTF-8 from django.http.response import HttpResponse, Http404 import datetime def hours_ahead(request,offset): try: offset = int(offset) except ValueError: raise Http404() dt = datetime.datetime.now() + datetime.timedelta(hours = offset) #datedelta()中参数必须是整型 html = "<html><body>In %s hour(s),it will be %s.<body/><html/>"%(offset,dt) return HttpResponse(html)
从上面的代码中就可以看出,我们的HTML代码和我们的Python混合在一起了,这样不仅影响开发速度,也不便于后期维护。下面我会详细介绍django中的模板。模板的作用是要实现将HTML代码和Python代码分开。首先在我们应用程序下面新建一个templates文件夹,之后我们的所有模板都会放在这个文件夹下面,因为django1.6的setting.py文件中没有TEMPLATE_DIRS这个选项,取而代之的是它会默认去寻找template文件夹下面的模板。我们在这个文件夹下面新建一个html。这个html文件中主要是放一些我们页面不会变化或者很少变化的代码,而那些经常变化的代码我们使用{%block%}{%endblock%}进行申明,然后在子页面中可以对这部分代码进行覆盖。base.html代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{%block title%}{%endblock%}</title> </head> <body> <h1>My helpful timestamp site</h1> {%block content%}{%endblock%} {%block footer%} <hr> <p>Thanks for visiting my site</p> {%endblock%} </body> </html>
上面代码中,我们使用模板标签将html的title,content,以及footer进行了占位。然后再新建一个current_datetime.html的页面继承我们的base.html页面,然后对其中的title,content部分进行覆盖,footer部分保留父页面base.html中的代码。代码如下:
{%extends "base.html"%} <!--使用extends继承base.html页面。必须放在第一行--> {%block title%}The current time{%endblock%}<!--定义title代码块中的内容--> {%block content%} <!--定义content代码块中的内容--> <P>It is now {{current_date}}.</p> {%endblock%}
这样使用之后,我们访问current_datetime.html页面的时候整体框架是base.html中所定义的,而局部效果回事我们current_datetime.html中所定义的。对于一个网站而言,我们可以定义尽可能多的{%block%},这样我们子页面继承的时候会有较好的扩展性。下面是视图views.py中所定义的函数代码:
from datetime import datetime from django.shortcuts import render_to_response # from django.template.loader import get_template # from django.template.context import Context # from django.http.response import HttpResponse # Create your views here. # def current_time(request): # now = datetime.now() # t = get_template('current_time.html') # html = t.render(Context({'current_date':now})) # # return HttpResponse(html) def current_time(request): now = datetime.now() return render_to_response('current_datetime.html',{'current_date':now})
上面的函数返回当前的时间,注释部分和没注释的代码效果是一样的。值得注意的是使用render_to_response函数时,其第一个参数必须是要使用模板的名称。第二个参数是可选的,如果你要给定这个参数,那么这个参数必须是为该模板创建Context时所使用的字典。如果不给定,函数将使用一个空字典。下面是应用程序中urls.py的代码:
from django.conf.urls import patterns, url from Second import views urlpatterns = patterns('', url(r'^time/', views.current_time), )
urls.py是将我们视图views.py中的代码和我们之后访问页面在地址栏中所输入的地址进行绑定。url()中的第一个参数是一个正则表达式,第二个参数是我们要绑定的函数代码。配置好我们应用程序的urls.py之后,我们还需要在我们项目的urls.py中进行配置,具体如下:
from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^Second/',include('Second.urls')) )
在这里我们使用include将我们应用程序Second中的urls引入。并指定我们要访问页面的正则表达式。结合两个urls.py中正则表达式所描述的url,我们之后在访问页面的时候,路径应该是http://localhost:8000/Second/time/。这里端口8000是默认的。我们可以选择我们想要的端口号,但是前提是那个端口号没有被其它应用程序占用。最有我们在项目的setting.py将我们的应用程序进行注册。打开项目的setting.py,在INSTALLED_APPS中将我们应用程序的名字加入。如下:
然后我们启动服务,并访问localhost:8000/Second/time,可以看到下面的效果。
相关文章推荐
- python学习――装饰器
- Python学习日记---列表和元组
- 利用堡垒主机获取防火墙里面主机信息
- 关于去哪儿网的UI自动化测试脚本(Python实现)
- Python中thread 多线程处理
- 安装python MySQLdb报错:pymemcompat.h:10:20: 致命错误的解决
- python中引用与复制用法实例分析
- windows环境,用python实现SSH操作
- <PY><Numpy><Scipy>调整音量
- Python命令tab键自动补全
- Python进程间通信用法实例
- python中__slots__用法实例
- python目录操作
- python模块ConfigParser操作配置文件
- python协程用法实例分析
- robot framework用python扩展编写自定义library
- Python获取系统默认字符编码的方法
- <PY><NumPy><SciPy>图像翻转切割遮罩
- Python Knowledge
- python中__call__内置函数用法实例