设为首页 收藏本站
查看: 668|回复: 0

[经验分享] Python笔记(五)--Django中使用模板

[复制链接]

尚未签到

发表于 2015-11-30 09:15:53 | 显示全部楼层 |阅读模式
  使用Django开发网站时,如果不使用模板,那么将会很不合理。因为我们所有的html代码都需要被硬编码到我们的Python代码中。我们新建一个工程,然后再在新建一个应用程序,并在其中的views.py文件中添加如下代码:



1 #coding=UTF-8
2 from django.http.response import HttpResponse, Http404
3 import datetime
4
5 def hours_ahead(request,offset):
6     try:
7         offset = int(offset)
8     except ValueError:
9         raise Http404()
10     
11     dt = datetime.datetime.now() + datetime.timedelta(hours = offset)   #datedelta()中参数必须是整型
12     html = "<html><body>In %s hour(s),it will be %s.<body/><html/>"%(offset,dt)
13     return HttpResponse(html)
  从上面的代码中就可以看出,我们的HTML代码和我们的Python混合在一起了,这样不仅影响开发速度,也不便于后期维护。下面我会详细介绍django中的模板。模板的作用是要实现将HTML代码和Python代码分开。首先在我们应用程序下面新建一个templates文件夹,之后我们的所有模板都会放在这个文件夹下面,因为django1.6的setting.py文件中没有TEMPLATE_DIRS这个选项,取而代之的是它会默认去寻找template文件夹下面的模板。我们在这个文件夹下面新建一个html。这个html文件中主要是放一些我们页面不会变化或者很少变化的代码,而那些经常变化的代码我们使用{%block%}{%endblock%}进行申明,然后在子页面中可以对这部分代码进行覆盖。base.html代码如下:



1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>{%block title%}{%endblock%}</title>
6 </head>
7 <body>
8     <h1>My helpful timestamp site</h1>
9     {%block content%}{%endblock%}
10     {%block footer%}
11     <hr>
12     <p>Thanks for visiting my site</p>
13     {%endblock%}
14 </body>
15 </html>
  上面代码中,我们使用模板标签将html的title,content,以及footer进行了占位。然后再新建一个current_datetime.html的页面继承我们的base.html页面,然后对其中的title,content部分进行覆盖,footer部分保留父页面base.html中的代码。代码如下:



1 {%extends "base.html"%}    <!--使用extends继承base.html页面。必须放在第一行-->
2
3 {%block title%}The current time{%endblock%}<!--定义title代码块中的内容-->
4
5 {%block content%}    <!--定义content代码块中的内容-->
6 <P>It is now {{current_date}}.</p>
7 {%endblock%}
  这样使用之后,我们访问current_datetime.html页面的时候整体框架是base.html中所定义的,而局部效果回事我们current_datetime.html中所定义的。对于一个网站而言,我们可以定义尽可能多的{%block%},这样我们子页面继承的时候会有较好的扩展性。下面是视图views.py中所定义的函数代码:



1 from datetime import datetime
2 from django.shortcuts import render_to_response
3 # from django.template.loader import get_template
4 # from django.template.context import Context
5 # from django.http.response import HttpResponse
6
7 # Create your views here.
8 # def current_time(request):
9 #     now = datetime.now()
10 #     t = get_template('current_time.html')
11 #     html = t.render(Context({'current_date':now}))
12 #      
13 #     return HttpResponse(html)
14
15 def current_time(request):
16     now = datetime.now()
17     return render_to_response('current_datetime.html',{'current_date':now})
  上面的函数返回当前的时间,注释部分和没注释的代码效果是一样的。值得注意的是使用render_to_response函数时,其第一个参数必须是要使用模板的名称。第二个参数是可选的,如果你要给定这个参数,那么这个参数必须是为该模板创建Context时所使用的字典。如果不给定,函数将使用一个空字典。下面是应用程序中urls.py的代码:



1 from django.conf.urls import patterns, url
2 from Second import views
3
4 urlpatterns = patterns('',
5     url(r'^time/', views.current_time),
6 )
  urls.py是将我们视图views.py中的代码和我们之后访问页面在地址栏中所输入的地址进行绑定。url()中的第一个参数是一个正则表达式,第二个参数是我们要绑定的函数代码。配置好我们应用程序的urls.py之后,我们还需要在我们项目的urls.py中进行配置,具体如下:



1 from django.conf.urls import patterns, include, url
2
3 urlpatterns = patterns('',
4     url(r'^Second/',include('Second.urls'))
5 )
  在这里我们使用include将我们应用程序Second中的urls引入。并指定我们要访问页面的正则表达式。结合两个urls.py中正则表达式所描述的url,我们之后在访问页面的时候,路径应该是http://localhost:8000/Second/time/。这里端口8000是默认的。我们可以选择我们想要的端口号,但是前提是那个端口号没有被其它应用程序占用。最有我们在项目的setting.py将我们的应用程序进行注册。打开项目的setting.py,在INSTALLED_APPS中将我们应用程序的名字加入。如下:
DSC0000.png
  然后我们启动服务,并访问localhost:8000/Second/time,可以看到下面的效果。 DSC0001.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145157-1-1.html 上篇帖子: Codecademy python 下篇帖子: 实习小记-python 内置函数__eq__函数引发的探索
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表