注明:python版本为3.3.1、Django版本为1.5.1,操作系统为Windows7,其他版本有一些不同的地方读者可以自行探讨。

前一章我们简略的讲解了下Django的视图和Url的配置,那么这一章我们就通过一个简单的例子来讲解下动态视图和动态Url。

照例使用python manage.py runserver 命令启动web服务。下面我们将用datetime模块显示和计算时钟。

打开上一章建立的view.py文件,在原有代码后面加入以下代码:

import datetime
def current_datetime(request):now=datetime.datetime.now()html="<html><body>It's now %s.</body></html>" %nowreturn HttpResponse(html)

上面代码的意思如果大家稍微知道点python知识就应该明白,%now其实就是给%s传递了一个值,而已这里就不做过多解释。

再打开urls.py文件建立相应的url配置,url配置文件代码如下。

from django.conf.urls import patterns,include,url
urlpatterns = patterns('',# Examples:url(r'^hello/$','firstsite.view.hello',name='hello'),url(r'^time/$','firstsite.view.current_datetime',name='current_datetime'),
)

这里看到代码只是增加了倒数第二行一行,而且还删除了from firstsite.view import hello这一行(这是我后来才注意到到的在url中其实已经有导入的意思了,这行代码显得有点多余,并不影响代码的执行,也能输出helloworld,这里做个纠正。)另外name的名字也不一定要是current_datetime,只是为了好记所以这样写。
打开浏览器输入:http://127.0.0.1:8000/time/ 显示出当前的时间。如下图:

---------------------------------------------------------------------

每次刷新页面都可以看到数字有变化哦。当然现在这只是静态的变化,如果我想得到一个小时候的时间该怎么办呢?下面我们就解决这个问题,也就是动态Url。

我们要实现的输入:http://127.0.0.1:8000/time/plus/1/ 则显示比当前时间晚1个小时的时间,输入:http://127.0.0.1:8000/time/plus/2/ 则显示比当前时间晚2个小时的时间,当然为了简便点我们将规定最大值为99,也就是最大显示99个小时以后的时间。

一般来说新手看到这个问题可能会直接在urls.py文件中写代码,比如下面这个:

from django.conf.urls import patterns,include,url
urlpatterns = patterns('',# Examples:url(r'^hello/$','firstsite.view.hello',name='hello'), url(r'^time/$','firstsite.view.current_datetime',name='current_datetime'),url(r'^time/plus/1/$','firstsite.view.current_datetime_addone',name='current_datetime_addone'),url(r'^time/plus/2/$','firstsite.view.current_datetime_addtwo',name='current_datetime_addtwo’),url(r'^time/plus/3/$','firstsite.view.current_datetime_addthree',name='current_datetime_addthree'),
)

上面这些代码结合在view.py里面添加的current_datetime_addone、current_datetime_addtwo、current_datetime_addthree三个函数虽然可以显示:

http://127.0.0.1:8000/time/plus/1/

http://127.0.0.1:8000/time/plus/2/

http://127.0.0.1:8000/time/plus/3/

这三个页面,但要显示4小时后则又要添加函数和url配置,显得好不麻烦,所以下面有一个更好的方法。

更改view.py代码如下:

def hours_add(request,offset):try:offset=int(offset)except ValueError:raise Http404()dt=datetime.datetime.now()+datetime.timedelta(hours=offset)html="<html><body>In %s hour(s),it will be %s.</body></html>"%(offset,dt)return HttpResponse(html)

其中的try和except是因为从url获得的参数可能会是数字以外的字符,offset可以随便为一个名称,接受url传递过来参数,try后面的offset=int(offset)只是因为timedelta()函数里面的几个参数要求的都要是整数,所以必须转换,如果传递过来的参数不是整数,比如:http://127.0.0.1/time/plus/ab/ 传递过来的就是ab,这时没法将ab转换成整形,便会引发Http404()这个函数,至于这个函数怎么显示,大家可以百度之哦。

再更改urls.py文件代码如下:

from django.conf.urls import patterns,include,url
urlpatterns = patterns('',# Examples:url(r'^hello/$','firstsite.view.hello',name='hello'),url(r'^time/$','firstsite.view.current_datetime',name='current_datetime'),url(r'^time/plus/(\d{1,2})/$', 'firstsite.view.hours_add',name='time-plus'),url(r'^.*$', 'firstsite.view.error', name='error'),
)

倒数第二行其实是一个404的页面,只要在view.py里面再定义一个error函数就可以了,可以模仿hello。
倒数第三行的(\d{1,2})这个正则表达式的意思则是输入一个0-99(包括0和99)之间的数字。

好了现在输入:http://127.0.0.1:8000/time/plus/2/ 试试看是不是得到了下面的结果。

---------------------------------------------------------------------

更改数字试试看是不是有变化哦。

最后我们回到view.py文件的hours_add()函数,目前里面只传递了两个参数,那么我们是不是可以传递第三个参数呢?想到这,聪明的你应该知道怎么做了吧,这个问题就留给大家了。

另外本教程参考了DjangoBook2里面的很多内容,我也是每天学完一章然后隔一天就写个教程复习下,所以很多例子可能会很相似,大家也可以直接去看这本书,在我博客主页的连接上就有它的翻译版本,大家也可以网上下载,不过一定要注意版本哦。

这一章暂时就到这把,下周一就要交毕业设计了,论文才写了两章,要加油了。下一章我们讲讲Django的模板吧。

本人既是python的初学者也是Django的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。

转载于:https://www.cnblogs.com/thunderest/archive/2013/05/11/3073448.html

Django系列教程:三、动态视图和动态Url相关推荐

  1. Fastify 系列教程三 (验证、序列化和生命周期)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...

  2. 汇川技术小型PLC梯形图编程系列教程(三):PLC系统程序与用户程序介绍

    原文链接:汇川技术小型PLC梯形图编程系列教程(三):PLC系统程序与用户程序介绍 PLC的定义 可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统.它采用一种可编程的存储器,在其 ...

  3. 树莓派4B系列教程三 :优化配置

    树莓派4B系列教程三 :优化配置 写在前面 树莓派4B内存增加 CPU温度控制 显存优化 Chromuim缓存转移 优化自启程序 Chromium插件安装 离线安装插件时遇到的问题 结语 写在前面 不 ...

  4. ASP .NET Core Web MVC系列教程三:添加视图

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...

  5. 最浅显易懂的Django系列教程(31)-类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View: django.views.generic.base.View是 ...

  6. [Django学习]第三章 视图和url配置

    2019独角兽企业重金招聘Python工程师标准>>> 在上一章使用django-admin.py startproject tests制作的项目中的tests文件夹里,创建一个vi ...

  7. 微信小程序开发系列教程三:微信小程序的调试方法

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...

  8. ROS系列教程三:roslaunch文件及参数服务器

    一.标签简介 1.<launch> ... </launch> : 根标签,一般写在整个launch文件的头尾,斜杠/代表结束: 2.<node> :启动节点,如果 ...

  9. Django cms 教程三:创建模板

    一.下载模板文件 我们直接用Bootstrap里面的Clean Blog模板作为我们网站的模板.进入https://startbootstrap.com/template-overviews/clea ...

最新文章

  1. CVPR 2020 Oral | 旷视提出Circle Loss,革新深度特征学习范式
  2. 架构实战项目心得(三):JAVA和MAVEN的环境配置
  3. JDBC+Servlet+JSP整合开发之22.JSP简介
  4. 太优秀了!GitHub 标星 40000+ 的大佬和他们的公众号
  5. shiro的会话管理:应用场景分析
  6. 抽象工厂模式_抽象工厂模式
  7. Ajax Toolkit 控件学习系列(5) ——CalendarExtender使用
  8. 简单分析KafKa工作原理
  9. linux删除文件_Linux删除文件夹用什么命令
  10. android 判断照片清晰度_手机如何拍出更清晰的照片?带你走进变焦与对焦的世界...
  11. python回到首行_python读取文件首行和最后一行
  12. Flink读写Mysql(Java版)
  13. android 4.0 蓝牙分析之二
  14. Atom : 一些有意思的插件
  15. Nuget包管理器将nupkg文件导入ASP.NET MVC5项目
  16. STM3库文件 hal_uart.c的使用
  17. vs2010 调用matlab,vs2010调用matlab引擎
  18. 如何终止运行matlab,matlab终止运行命令
  19. 戴尔计算机更新程序,戴尔电脑如何更新显卡驱动 其实很简单-电脑显卡怎么升级...
  20. 十问数据库:问来路,问现在,问未来

热门文章

  1. 刚刚,特斯拉宣布终止私有化,马斯克最终没能说服大股东
  2. Uber致人死亡或为自动驾驶肇事责任 没有判例可循
  3. 2018新年感谢,写在互联网类脑架构研究十年的前夜
  4. 两个黑箱问题 ——深度神经网络和脑神经网络
  5. Cortana 的谢幕,不一定是产品问题
  6. 好奇了好久的「对象」,就这?
  7. 关于鸿蒙 2.0,那些开发者不知道的一切
  8. 老码农揭开行业黑幕:如何编写无法维护的代码
  9. 你不知道的z-index
  10. JS魔法堂:属性、特性,傻傻分不清楚