将 URL 映射到视图

那么概括起来,该视图函数返回了包含当前日期和时间的一段 HTML 页面。但是如何告诉 Django 使用这段代码呢?这就是 URLconfs 粉墨登场的地方了。

URLconf 就像是 Django 所支撑网站的目录。它的本质是 URL

模式以及要为该 URL 模式调用的视图函数之间的映射表。你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL

调用那段代码。但必须记住的是视图函数必须位于 Python 搜索路径之中。

Python 搜索路径

Python 搜索路径 就是使用 import 语句时,Python 所查找的系统目录清单。

举例来说,假定你将 Python 路径设置为 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果执行代码 from foo import bar ,Python 将会首先在当前目录查找 foo.py 模块( Python 路径第一项的空字符串表示当前目录)。如果文件不存在,Python将查找 /usr/lib/python2.4/site-packages/foo.py 文件。如果文件也不存在,它将尝试 /home/username/djcode/foo.py 。最后,如果 这个 文件还不存在,它将引发 ImportError 异常。

如果对了解 Python 搜索路径值感兴趣,可以启动 Python 交互式解释程序,输入 import sys ,接着输入 print sys.path 。

通常,你不必关心 Python 搜索路径的设置。Python 和 Django 会在后台自动帮你处理好。(如果有兴趣了解的话,Python 搜索路径的设置工作是 manage.py 文件的职能之一。)

前一章中执行 django-admin.py startproject 时,该脚本会自动为你建了一份 URLconf(即 urls.py 文件)。让我们编辑一下这份文件。缺省情况下它是下面这个样子:

from django.conf.urls.defaults import *

urlpatterns = patterns('',

# Example:

# (r'^mysite/', include('mysite.apps.foo.urls.foo')),

# Uncomment this for admin:

# (r'^admin/', include('django.contrib.admin.urls')),

)

让我们逐行逐句分析一遍这段代码:

第一行从 django.conf.urls.defaults 模块引入了所有的对象,其中包括了叫做 patterns 的函数。

第二行调用 patterns() 函数并将返回结果保存到 urlpatterns 变量。 patterns() 函数只传入了一个空字符串参数。其他代码行都被注释掉了。 (该字符串可用作视图函数的通用前缀,但目前我们将略过这种高级用法。)

当前应该注意是 urlpatterns 变量, Django 期望能从 ROOT_URLCONF 模块中找到它。该变量定义了 URL 以及用于处理这些 URL 的代码之间的映射关系。

默认情况下,URLconf 所有内容都被注释起来了——Django

应用程序还是白版一块。(旁注:这也就是上一章中 Django 显示“It worked!”页面的原因。如果 URLconf 为空,Django

会认定你才创建好新项目,因此也就显示那种信息。)

现在编辑该文件以展示我们的 current_datetime 视图:

from django.conf.urls.defaults import *

from mysite.views import current_datetime

urlpatterns = patterns('',

(r'^time/$', current_datetime),

)

我们做了两处修改。首先,我们从模块 (在 Python 的 import 语法中, mysite/views.py 转译为 mysite.views ) 中引入了 current_datetime 视图。接着,我们加入了 (r'^time/$', current_datetime), 这一行。该行就是所谓的 URLpattern ,它是一个 Python 元组,其第一个元素是简单的正则表达式,第二个元素是为该模式应用的视图函数。

简单来说,我们只是告诉 Django,所有指向 URL /time/ 的请求都应由 current_datetime 这个视图函数来处理。

下面是一些需要注意的地方:

注意,该例中,我们将 current_datetime 视图函数作为对象传递,而不是调用它。这是 Python (及其它动态语言的) 的一个重要特性:函数是一级对象(first-class objects), 也就是说你可以像传递其它变量一样传递它们。很酷吧?

r'^time/$' 中的 r 表示 '^time/$' 是一个原始字符串。这样一来就可以避免

正则表达式有过多的转义字符。

不必在 '^time/$' 前加斜杠(/)来匹配 /time/ , 因为 Django 会自动在每个表

达式前添加一个斜杠。乍看起来,这好像有点奇怪,但是 URLconfs 可能由其它的 URLconfs

所引用, 所以不加前面的斜杠可让事情简单一些。这一点在第 8 章中将有进一步阐述。

上箭头 ^ 和美元符号 $ 符号非常重要。上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。

最好还是用范例来说明一下这个概念。如果我们用 '^time/' (结尾没有$),

那么以 time/ 开始的 任意 URL 都会匹配,比如 /time/foo 和 /time/bar ,

不仅仅是 /time/ 。同样的,如果我们去掉最前面的 ^ ( 'time/$' ),

Django 一样会匹配由 time/ 结束的 任意 URL /time/ ,比如

/foo/bar/time/ 。

因此,我们必须同时用上 ^ 和 $ 来精确匹配 URL /time/ 。不能多也不能少。

你可能想如果有人请求 /time 也可以同样处理。如果 APPEND_SLASH 的

设置是 True 的话,系统会重定向到 /time/ ,这样就可以一样处理了。

(有关内容请查看附录 E )

启动Django开发服务器来测试修改好的 URLconf, 运行命令行 python manage.py runserver 。

(如果你让它一直运行也可以,开发服务器会自动监测代码改动并自动重新载入,所以不需要手工重启)

开发服务器的地址是 http://127.0.0.1:8000/ ,打开你的浏览器访问

http://127.0.0.1:8000/time/ 。 你就可以看到输出结果了。

万岁!你已经创建了第一个Django的web页面。

正则表达式

正则表达式 (或 regexes ) 是通用的文本模式匹配的方法。Django URLconfs 允许你

使用任意的正则表达式来做强有力的URL映射,不过通常你实际上可能只需要使用很少的一

部分功能。下面就是一些常用通用模式:

符号匹配

. (dot)

任意字符

\d

任意数字

[A-Z]

任意字符, A-Z (大写)

[a-z]

任意字符, a-z (小写)

[A-Za-z]

任意字符, a-z (不区分大小写)

+

匹配一个或更多 (例如, \d+ 匹配一个或

多个数字字符)

[^/]+

不是/的任意字符

*

匹配0个或更多 (例如, \d* 匹配0个

或更多数字字符)

{1,3}

匹配1个到3个(包含)

python django 动态网页_使用Django创建动态页面相关推荐

  1. django构建网页_通过解决问题的方式学习django,律师如何构建副业

    django构建网页 This post was originally published on Codementor's blog 该帖子最初发布在 Codementor的博客上 "I'm ...

  2. python展示数据库视图_在Django的视图中使用数据库查询的方法

    在视图中也有笨方法可以从数据库中获取数据. 很简单: 用现有的任何 Python 类库执行一条 SQL 查询并对结果进行一些处理. 在本例的视图中,我们使用了 MySQLdb 类库(可以从 http: ...

  3. django构建网页_如何使用Django构建照片供稿

    django构建网页 by Ogundipe Samuel 由Ogundipe Samuel 如何使用Django构建照片供稿 (How to build a photo feed using Dja ...

  4. django restful 请求_利用 Django REST framework 构建 RESTful Web API

    利用 Django REST framework 构建 RESTful Web API 终于到了动手操作的环节啦,这一节,我们以师生管理系统为例,带领大家搭建一套 framework Web API. ...

  5. python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium

    selenium--自动化测试工具,专门为Web应用程序编写的一个验收测试工具,测试其兼容性,功能什么的.然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏览器获得的解析JavaScript的能力. ...

  6. django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能

    第一步:编写增删查改功能代码 打开项目myweb目录下view.py, 并编写以下代码 view.py from django.shortcuts import render, redirect fr ...

  7. 用php实现动态网页效果,使用PHP实现动态网页_PHP

    今天,Web站点费尽心思想要为用户提供他们从未体验过的东西.除了友好的界面,细致的服务,实用的信息以外,为用户定制的动态的网页内容也能够提高Web站点的用处并加强访问的针对性,这使得用户更有可能在以后 ...

  8. css dhtml动态网页教程,CSS/JSS DHTML动态网页制作

    第0章 本书导读 0.1 本书适合的读者群 0.2 动态超文本标记语言(Dynamic HTML)的概念 0.3 DTHML的特点 0.4 CSS和DHTML 0.5 JavaScript和DHTML ...

  9. matlab 动态存储图片,利用matlab创建动态图并保存为AVI格式

    利用matlab创建动态图并保存为AVI格式. MATLAB中,创建电影动画的过程分为以下四步: step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个 ...

最新文章

  1. 图表君聊docker-仓库
  2. android mmkv使用_MMKV解读
  3. opencv 图片剪切
  4. vb+socket 编写入侵监听程序
  5. linux自动获取ip网卡配置文件,linux 命令行下配置网卡自动获取 IP
  6. P8208-[THUPC2022 初赛]骰子旅行【dp】
  7. JasperReports JSF插件用例–简单列表报告
  8. (扩展欧几里得)青蛙的约会
  9. SpringCloud 微服务 (十五) 服务容错 Hystrix
  10. PU-Net: Point Cloud Upsampling Network
  11. Angular 2 之七 依赖注入
  12. router-link 绑定事件不生效
  13. 关于IOS屏幕的旋转问题
  14. webgl渲染Yuv420P图像
  15. winform textbox提示历史记录
  16. ant centos环境下 编译没有将配置文件加载_Linux 下的动态库、静态库与环境变量...
  17. Web安全之CSRF攻击
  18. VOSviewer使用方法(详细便捷)附下载网址
  19. 2019最新天善智能python3数据分析与挖掘项目实战(完整)
  20. 自建 Bitwarden 服务器

热门文章

  1. nodejs源码—初始化
  2. shiro系列一、认识shiro
  3. 路由器+摄像头:Netgear在国内怎么走?
  4. oracle学习(二)pl/sql基础
  5. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
  6. ccna设备的NAT地址转换
  7. vue中的v-model原理,与组件自定义v-model
  8. Qt QDialog将窗体变为顶层窗体(activateWindow(); 和 raise() )
  9. ios 中的小技巧 - 总有你想要的 一
  10. 文档型数据库设计模式-如何存储树形数据