http://bio.rusaer.com/archives/288

 

Django一个比较隐含的函数url

阅读量(5010)  |  发表 于 2010-03-09 14:26:18

Django下有一个比较隐含的函数url,在django/conf/urls/defaults模块中,虽然只有短短的10行代码,但功能却很了得。起初初学Django,并没有发现它,Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址改变了叫法,那眼泪可是哗哗的,有多少的拼凑的地址就得改动多少处!这时发现了url函数,这下可都好了,不管urlpatterns里的某个地址叫法怎么改变,Templates里的地址都不用修改了。

比如没有采用url函数的时候:

urlpatterns里定义了资讯的首页地址,

urlpatterns = patterns('',   

    (r'^article$','news_index' ),

)

Templates里的html为

<a href="/article">资讯</a>

而且不止一个页面,可能有10个页面使用到资讯的链接,这时你的Templates上就会有10个那样的页面a标签,当有一天,你突然想改变地址的叫法,

urlpatterns = patterns('',   

    (r'^news$','news_index' ),

)

你会发现,你在Templates中得修改10个

<a href="/article">资讯</a>

<a href="/news">资讯</a>

可恨的是那样的标签分布在不同的页面上,

有更糟糕的时候就是 你不知道到底有多少个那样的a标签(总不能一个个数嘛)。

有了url情况就大为不一样了,

urlpatterns里定义了资讯的首页地址,

urlpatterns = patterns('',   

url(r'^article$','news_index' ,name="news_index"),

)

Templates里的html为

<a href="{%url news_index%}">资讯</a>

你怎么修改urlpatterns的地址,Template都会随着改变,省事了不少。

url的用法也很简单,只要在urlpatterns里使用它,附加一个name,如:

url(r'^article$','news_index' ,name="news_index"),

Templates里 这样使用

{%url name%},

地址链接就能使用了。注意的是name是全局的,你整个urlpatterns里只能一个唯一的name,这个道理应该好理解,就像网站的地址也是唯一性的。

Templates里的用法简单,在views里怎么用呢?以前在没有使用的url函数的时候,可能指向一个地址使用

HttpResponseRedirect("/article")

当然urlpatterns改变地址叫法的时候,所用的views的指向函数的参数都得跟着变。有了url函数,变成:

HttpResponseRedirect(reverse("news_index"))

好处和Template里使用的情形一样的。

当遇到urlpatterns的地址包含有参数的时候,如:

(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$','news_list' ),

有两个参数,最终的地址如归档的地址http://www.baoyalv.com/2010/02

情况变复杂点了,urlpatterns的以上的用法不变:

url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$','news_list',name="news_archive" ),

Templates里的用法就需要改改了,我们把url看成一个方法,结合templates的语法,结果就出来了:

<a href="{%url news_archive 2010 ,02%}">2010年02月</a>

后面的2010, 02 就是参数了,参数之间用逗号隔开,多少个参数用法都一样的。当然,2010 02 参数是某个实体获得的,具体的情况具体分析。而在views呢,有了参数怎么写,万变不离宗:

reverse("news_archive",kwargs={"year":2010,"month":02})

即可,最后解析出来的地址为“/2010/02”。

django的url的name参数的意义(转发)的更多相关文章

  1. django的url的name参数的意义

    Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址 ...

  2. django的url的name参数的意义及view中reverse

    Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址 ...

  3. django的url分配和url捕获参数

    django的url分配 一般视图模块(views.py)都放在自己所属的app目录下,在app目录下新建路径模块(urls.py),由app目录下的urls.py来分配当前app的路径. 在app目 ...

  4. django中url路由配置及渲染方式

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...

  5. Django接收URL问号参数

    问题概览: 一开始需求是想通过URL接收参数,但是一直固守通过正则表达式的方式接收参数,即形如(?P<parm>.+)的方式. 后面发现(/?)在http://regex101.com是可 ...

  6. Django之url定义和ORM框架的使用

    前言,Django安装 pip install django # 官网安装最新版本 pip install django -i "https://pypi.doubanio.com/simp ...

  7. Django ORM字段和字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  8. nginx.conf各参数的意义

    搬运+翻译至 http://qiita.com/syou007/items/3e2d410bbe65a364b603 /etc/nginx/nginx.conf 记录各个参数的意义 user user ...

  9. 【SpringMVC】SpringMVC系列3之@PathVariable映射URL占位符参数

    3.@PathVariable映射URL占位符参数 3.1.概述 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义. ...

随机推荐

  1. uiautomator做自动化的过程

    UIautiomator官网地址:http://android.toolib.net/sdk/index.html 1.环境搭建 使用uiautomator需要导入jar包,uiautomator.j ...

  2. php json_encode转JSON 编码显示中文

    对变量进行 JSON 编码显示中文 /**context":"/u2345/u43245/u2345 转成中文显示 * 对变量进行 JSON 编码[{"time" ...

  3. APK downloader

    APK Downloader Android apk (2016-08-25发现) Apk pure 好像提供免费的FQ工具哟 发现一个Android richtext RichEditor for ...

  4. Delphi推出Delphi XE4支持IOS开发

    Delphi 新推出 Delphi XE4 ,这是一个支持 iOS 应用开发的新版本.Delphi XE4 带来 Embarcadero 全新的 ARM 编译器 下载地址

  5. mybatis 无法转换为内部表示 解决

    出现这个问题,一般是JavaBean定义的时候数据类型不准造成的. 其中javabean定义的字段的类型并不需要完全和数据库中的字段一样. 在mapper.xml中可能做了转换  比如 CASE WH ...

  6. IO流详解(半教材类型)

    这两天学习了IO流,整理了一些理论知识点,仅供参考. java流概述 一 流 从操作系统层面和文件系统,数据保存相关的是所有语言都具备的一个基本功能,java专门开发了一个包:java.io.*;ja ...

  7. UIMenuController/UIPasteboard(1) 制作一个可以粘贴复制的Label

    效果如下:   苹果只放出来了 UITextView,UITextField,webView三个控件的剪贴板,所以我们要自定义可以复制粘贴的控件,首先需要打开UIResponder的两个方法: - ( ...

  8. C#break、continue、return、goto

    1.break break语句会使运行的程序立即退出包含在其中的最内层循环(结束此次循环且结束该循环控制体)或者switch语句 ; ; j < ; j++) { i++; )break; Co ...

  9. (转)Quartz.NET管理类

    最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...

  10. 14_Response对象

    [简述] Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象. request和response对象既然代表请求和响应 ...