django URLconf学习

简介:
django 1.4.5 documentation
    The view layer -->The basics 
一、
patterns语法格式:
 
  1. patterns = pattern('prefix',     //prefix一般为空 
  2.     url() 
url语法格式:
 
  1. patterns = pattern('prefix'
  2.     url(regular expression, view function [, optional dictionary[, name]]) 
optional dictionary是字典形式参数
optional name是named url pattern 
二、语法示例: 
 
  1. urlpatterns = pattern(''
  2.     (r'^articles/2003/$''news.views.special_case_2003'), 
  3.     (r'^articles/(\d{4})/$''news.views.year_archive'), 
  4.     (r'^articles/(\d{4})/(\d{2})/$''news.views.month_archive'), 
  5.     (r'^articles/(\d{4)/(\d{2})/(\d+)/$''news.views.article_detail'), 
1、括号内的参数在传递给view视图函数时,都是按位置进行传递
2、url请求/articles/2005/03/ 会被第三条记录匹配,Django会调用news.views.month_archive(request, '2005', '03')函数来处理URL请求
3、第一条和第二条记录都能匹配url请求/articles/2003/ , 但是django会使用第一条记录来匹配,因为urlpattern是按顺序进行匹配,只要匹配到就忽略后面的记录。这种形式不是很好,后面会介绍在views视图函数中使用默认参数来处理这种特殊情况 
三、命名组:
命名组语法格式: (?P<name>pattern)
其中,name是分组的名称,pattern是用于匹配的正则表达式
urls.py:
 
  1. from django.conf.urls import patterns, url, include 
  2.  
  3. urlpatterns = urlpattern(''
  4.     (r'^articles/2003/$''news.views.special_case_2003'), 
  5.     (r'^articles/(?P<year>\d{4})/$''news.views.year_archive'), 
  6.     (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$''news.views.month_archive'), 
  7.     (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$''news.views.article_detail'), 
  8. )  
1、django会调用news.views.month_archive(request, year='2005', month='03')来处理URL请求:/articles/2005/03/ ,这种形式比按位置传递可读性更强一些,也不容易出错 
四、urlpattern匹配URL请求时捕获的参数,都是以python字符串的形式传递给view视图函数,不管参数是以什么形式被捕获的:
 
 
  1. (r'^articles/(?P<year>\d{4})/$''news.views.year_archive'),  
尽管urlpattern在匹配时,\d{4}只匹配数字,但是当它把捕获到的年份数字传递给view视图函数时,是以字符串形式传递的。   
   五、为视图函数指定默认参数:   
 
  1. #URLconf 
  2. urlpatterns = pattern('', 
  3.     (r'^blog/$', 'blog.views.page'), 
  4.     (r'^blog/page(?P<num>\d+)/$', 'blog.views.page'), 
  5.  
  6. # View (in blog/views.py) 
  7. def page(request, num="1"): 
  8.     #Output the appropriate page of blog entries, according to num. 
上述示例,所有的请求都使用blog.views.page视图函数来处理URL请求;但当URL请求仅包括 /blog/ 时(特殊情况),被第一条记录匹配,视图函数page在处理该请求时,自动使用默认参数num的值1,具体形式由函数体定义。
  六、简化urlpattern书写:
1、The view prefix:
 
  1. urlpatterns = patterns('news.views',     //把前缀news.views添加到这里,避免在每一条记录中重复书写 
  2.     (r'^articles/(\d{4})/$''year_archive'), 
  3.     (r'^articles/(\d{4})/(\d{2})/$''month_archive'), 
  4.     (r'^articles/(\d{4})/(\d{2})/(\d+)/$''article_detail'), 
  2、Including other URLconfs:
 
  1. urlpatterns = patterns('', 
  2.     # ... snip ... 
  3.     (r'^comments/', include('django.contrib.comments.urls')), 
  4.     (r'^community/', include('django_website.aggregator.urls')), 
  5.     (r'^contact/', include('django_website.contact.urls')), 
  6.     (r'^r/', include('django.conf.urls.shortcut')), 
  7.     # ... snip ... 
使用include时,正则表达式不能使用$,因为在django执行时include时,是把include的url追加到后面

另一种形式:
 
  1. from django.conf.urls import patterns, url, include 
  2. extra_patterns = patterns(''
  3.     url(r'^reports/(?P<id>\d+)/$''credit.views.report', name='credit-reports'), 
  4.     url(r'^charge/$''credit.views.charge', name='credit-charge'), 
  5.   
  6. urlpatterns = patterns(''
  7.     url(r'^$''apps.main.views.homepage', name='site-homepage'), 
  8.     (r'^help/', include('apps.help.urls')), 
  9.     (r'^credit/', include(extra_patterns)), 
七、传递额外参数到视图函数:
 
  1. urlpatterns = patterns('blog.views'
  2.     (r'^blog/(?P<year>\d{4})/$''year_archive', {'foo''bar'}), 
1、额外参数都是字典形式
2、如果字典参数的key与命名组名称重名,则参数在传递给view视图函数时,字典参数会覆盖urlpattern捕获的参数。如:
 
  1. urlpatterns = patterns('blog.views'
  2.     (r'^blog/(?P<year>\d{4})/$''year_archive', {'year''000'}), 
view视图函数在处理URL请求/blog/2013/,使用的参数不是2013,而是000,尽管urlpattern捕获的参数是2013。  
八、传递额外参数到include():
 
  1. # main.py 
  2. urlpatterns = patterns(''
  3.     (r'^blog/', include('inner'), {'blogid'3}), 
  4.  
  5. # inner.py 
  6. urlpatterns = patterns(''
  7.     (r'^archive/$''mysite.views.archive'), 
  8.     (r'^about/$''mysite.views.about'), 
相当于:
 
  1. # main.py 
  2. urlpatterns = patterns(''
  3.     (r'^blog/', include('inner')), 
  4.  
  5. # inner.py 
  6. urlpatterns = patterns(''
  7.     (r'^archive/$''mysite.views.archive', {'blogid'3}), 
  8.     (r'^about/$''mysite.views.about', {'blogid'3}), 
1、额外参数都是字典形式
2、传递给include()的额外参数,将传递到include里的每一条记录,不管该处理该记录的视图函数是否能正确接受相应的参数

九、Naming URL patterns:
 
  1. urlpatterns = patterns(''
  2.     url(r'^archive/(\d{4})/$', archive, name="full-archive"), 
  3.     url(r'^archive-summary/(\d{4})/$', archive, {'summary'True}, "arch-summary"), 
使用:
{% url arch-summary 1945 %}
{% url full-archive 2007 %}
当多条记录都使用同一个视图函数处理时,使用named url来区分不同的记录
 

本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/1194384

相关文章
|
存储 缓存 数据库
Django框架学习(四)
Django框架学习(四)
|
前端开发 关系型数据库 MySQL
Django框架学习(三)
Django框架学习(三)
|
JSON 前端开发 数据库
Django框架学习(一)
Django框架学习(一)
|
21天前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
33 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
21天前
|
SQL Java 数据库
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
16 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
|
21天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
54 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
5月前
|
编解码 前端开发 JavaScript
技术经验分享:Django学习日记
技术经验分享:Django学习日记
【Django学习】(十六)session_token认证过程与区别_响应定制
【Django学习】(十六)session_token认证过程与区别_响应定制
|
6月前
|
Python
Django 学习教程-介绍与安装
本章介绍了Django是什么,以及为什么使用Django和安装Django
66 1
Django 学习教程-介绍与安装
|
6月前
|
调度 Apache 数据库
Django 学习教程-第一个 Django 应用
本章主要讲述了如何创建一个Django项目,以一个投票案例程序介绍了Django的请求和响应流程。
81 1