我的Django学习笔记(最后更新2008-05-22)
〖高级视图和URL配置〗
============================================================================
一、流线型化(Streamlining)函数导入
方式1:
方式2:
方式3:
二、使用命名组
无组命名:
有组命名:
例如,如果不带命名组,请求 /articles/2006/03/ 将会等于这样的函数调用:
month_archive(request, '2006', '03')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request, year='2006', month='03')
三、匹配/组合算法
四、伪造捕捉到的URLconf值
五、通用视图
原视图:
通用视图:
六、提供视图配置选项
一个应用中比较常见的可供配置代码是模板名字:
捕捉值和额外参数之间的优先级:
(比如, /mydata/2/ 或者 /mydata/432432/ )都会作 id 设置为 3 对待,不管URL里面能捕捉到什么样的值。
七、缺省视图参数
八、特殊情况下的视图
我们要利用URLconf从顶向下的解析顺序这个特点。象 /auth/user/add/ 的请求将会被 user_add_stage 视图处理。尽管URL也匹配第二种模式,它会先匹配上面的模式。(这是短路逻辑。)
九、从URL中捕获文本的注意点
每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。举个例子,在这行URLConf中:
(r'^articles/(?P\d{4})/$', views.year_archive),
参数 year 是作为string传至 views.year_archive() ,而非integer,即使 \d{4} 将只匹配整数的字符串。
当你在写视图代码时记住这点很重要,许多Python内建的方法对于接受的对象的类型很讲究。很常见的错误时用字符串值而不是整数值来创建datetime.date对象:
错误:
正确:
十、包含(include)其他URLconf
*/weblog/2007/ :在第一个URLconf中,模式 r'^weblog/' 被匹配。因为它是一个 include() ,Django将截掉所有匹配的文本,在这里是 'weblog/' 。URL剩余的部分是 2007/\ , 将在 mysite.blog.urls ·这个URLconf的第一行中被匹配。
*/weblog//2007/ :在第一个URLconf中,模式 r'^weblog/' 被匹配。因为它是一个 include() ,Django将截掉所有匹配的文本,在这里是 'weblog/' 。URL剩余的部分是 /2007/ (开头有一个斜杠),将不会匹配``mysite.blog.urls`` 中的任何URLconf。
*/about/ : 这个匹配第一个URLconf中的``mysite.views.about``view。只是为了示范你可以混合``include()`` patterns和 non-include() patterns在一起使用。
十一、捕获的参数如何让和 include()协同工作
在这个例子中,被捕获的”username”变量将传递给被included 的 URLconf,因此,在那个被included 的 URLconf中的每一个view函数都将获得那个参数。
十二、额外的URLconf如何和include()协同工作
下面的两个URLconf在功能上是相等的。
第一个:
第二个
============================================================================
一、流线型化(Streamlining)函数导入
方式1:
方式2:
方式3:
二、使用命名组
无组命名:
有组命名:
例如,如果不带命名组,请求 /articles/2006/03/ 将会等于这样的函数调用:
month_archive(request, '2006', '03')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request, year='2006', month='03')
三、匹配/组合算法
四、伪造捕捉到的URLconf值
五、通用视图
原视图:
通用视图:
六、提供视图配置选项
一个应用中比较常见的可供配置代码是模板名字:
捕捉值和额外参数之间的优先级:
(比如, /mydata/2/ 或者 /mydata/432432/ )都会作 id 设置为 3 对待,不管URL里面能捕捉到什么样的值。
七、缺省视图参数
八、特殊情况下的视图
我们要利用URLconf从顶向下的解析顺序这个特点。象 /auth/user/add/ 的请求将会被 user_add_stage 视图处理。尽管URL也匹配第二种模式,它会先匹配上面的模式。(这是短路逻辑。)
九、从URL中捕获文本的注意点
每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。举个例子,在这行URLConf中:
(r'^articles/(?P\d{4})/$', views.year_archive),
参数 year 是作为string传至 views.year_archive() ,而非integer,即使 \d{4} 将只匹配整数的字符串。
当你在写视图代码时记住这点很重要,许多Python内建的方法对于接受的对象的类型很讲究。很常见的错误时用字符串值而不是整数值来创建datetime.date对象:
错误:
正确:
十、包含(include)其他URLconf
*/weblog/2007/ :在第一个URLconf中,模式 r'^weblog/' 被匹配。因为它是一个 include() ,Django将截掉所有匹配的文本,在这里是 'weblog/' 。URL剩余的部分是 2007/\ , 将在 mysite.blog.urls ·这个URLconf的第一行中被匹配。
*/weblog//2007/ :在第一个URLconf中,模式 r'^weblog/' 被匹配。因为它是一个 include() ,Django将截掉所有匹配的文本,在这里是 'weblog/' 。URL剩余的部分是 /2007/ (开头有一个斜杠),将不会匹配``mysite.blog.urls`` 中的任何URLconf。
*/about/ : 这个匹配第一个URLconf中的``mysite.views.about``view。只是为了示范你可以混合``include()`` patterns和 non-include() patterns在一起使用。
十一、捕获的参数如何让和 include()协同工作
在这个例子中,被捕获的”username”变量将传递给被included 的 URLconf,因此,在那个被included 的 URLconf中的每一个view函数都将获得那个参数。
十二、额外的URLconf如何和include()协同工作
下面的两个URLconf在功能上是相等的。
第一个:
第二个