django url 软编码
期初用django 开发应用的时候,完全是在urls.py 中硬编码配置地址,在views.py中HttpResponseRedirect()也是硬编码转向地址,当然在template 中也是一样了,这样带来一个问题,如果在urls.py 中修改了某个页面的地址,那么所有的地方(views.py和template中)都要修改。如果是个很大的工程,那么要修改的地方就很多。当然,你也许会选择一个工具,直接查找替换来实现。除此之外呢.....
其实django 本身就提供了这个功能,就是 url 标签,利用 django 的 url 标签来实现这样的功能,在这个模块中:django/conf/urls/defaults
利用url 标签之后,不管urlpatterns里的某个地址叫法怎么改变,Templates里的地址都不用修改了。在模版中调用url标签的时候,需要:{% load url from future %}
比如没有采用url函数的时候:
urlpatterns里定义了资讯的首页地址,
程序代码(r'^article$','news_index' ),
)
Templates里的html为
<a href="/article">资讯</a>
而且不止一个页面,可能有很多个页面使用到资讯的链接,这时你的Templates上就会有许多那样的页面a标签,当有一天,你突然想改变地址的叫法,
程序代码(r'^news$','news_index' ),
)
你会发现,你在Templates中得修改10个<a href="/article">资讯</a>成<a href="/news">资讯</a>
可恨的是那样的标签分布在不同的页面上,有更糟糕的时候就是 你不知道到底有多少个那样的a标签(总不能一个个数嘛)。
有了url情况就大为不一样了,
urlpatterns里定义了资讯的首页地址,
程序代码url(r'^article$','news_index' ,name="news_index"),
)
Templates里的html为
程序代码你怎么修改urlpatterns的地址,Template都会随着改变,省事了不少。
url的用法也很简单,只要在urlpatterns里使用它,附加一个name,如:
程序代码Templates里 这样使用
程序代码地址链接就能使用了。注意的是name是全局的,你整个urlpatterns里只能一个唯一的name,这个道理应该好理解,就像网站的地址也是唯一性的。
Templates里的用法简单,在views里怎么用呢?以前在没有使用的url函数的时候,可能指向一个地址使用
HttpResponseRedirect("/article")
当然urlpatterns改变地址叫法的时候,所用的views的指向函数的参数都得跟着变。有了url函数,变成:
HttpResponseRedirect(reverse("news_index"))
好处和Template里使用的情形一样的。
当遇到urlpatterns的地址包含有参数的时候,如:
程序代码有两个参数,最终的地址如归档的地址http://www.yihaomen.com/2010/02
情况变复杂点了,urlpatterns的以上的用法不变:
程序代码Templates里的用法就需要改改了,我们把url看成一个方法,结合templates的语法,结果就出来了:
程序代码或者这样:
<a href="{%url 'news_archive' year=2010 month=02%}">2010年02月</a>
当然,在你后台的views.py 中的方法上也必须有这两个参数,比如
程序代码print 'year:',year
print 'monty:',month
......
后面的2010, 02 就是参数了,参数之间用逗号隔开,多少个参数用法都一样的。当然,2010 02 参数是某个实体获得的,具体的情况具体分析。而在views呢,有了参数怎么写,万变不离宗:
程序代码......
reverse("news_archive",kwargs={"year":2010,"month":02})
比如: return HttpResponseRedirect(reverse("news_archive",kwargs={"year":2010,"month":02}))
即可,最后解析出来的地址为“/2010/02”。
由此看出,在用 django开发应用的时候,url 标签是个很灵活的东西,应该多用,也为以后维护带来方便。
django url 软编码的更多相关文章
- Django Url编码问题
Django Url编码问题 最近在学习Django,写一个blog程序练练手手.对于一个才开始接触web开发的来说,难免会遇到一些问题. 有一个这样的模板: {%for k,v in cat ...
- python :Django url /views /Template 文件介绍
1,Django URL 路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django ...
- 第五篇Django URL name 详解
Django URL name 详解 利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护. Djan ...
- 【Web】URI和URL,及URL的编码
URI和URL是什么,以及他们的区别 URL,Uniform Resource Locator,统一资源定位符.用于表示网络上服务器的资源所在位置,比如我们输入浏览器的地址. URI,Uniform ...
- JS 和 Java 中URL特殊字符编码方式
前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1. 编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...
- html-----018----HTML Web Server/HTML URL 字符编码
HTML Web Server 如果希望向世界发布您的网站,那么您必须把它存放在 web 服务器上. 托管自己的网站 在自己的服务器上托管网站始终是一个选项.有几点需要考虑: 硬件支出 如果要运行“真 ...
- url在线编码和解码
在工作中,经常遇到encode之后的url.想查看里面的某个参数的时候,很不直观.今天在网上搜了一下对url在线编码和解码的网站.对我来说,使用起来很方便.而且这个网站里面,不仅仅有对url的编码和解 ...
- URL的编码和解码
URL的编码和解码 参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集 也就是说URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和 ...
- JS对url进行编码和解码(三种方式区别)
Javascript语言用于编码的函数,一共有三个,最古老的一个就是escape().虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起. escape 和 ...
随机推荐
- Bungie Interview with Halo3 Developer
http://www.realtimerendering.com/blog/tag/bungie/ Digital Foundry interview with Halo: Reach develop ...
- spring mvc超强的json支持,你自己根本不需要额外的配置。spring mvc都给你配置好了!!!
SpringMVC层跟JSon结合,几乎不需要做什么配置,代码实现也相当简洁.再也不用为了组装协议而劳烦辛苦了! 2.一.Spring注解@ResponseBody,@RequestBody和Http ...
- Locking
Computer Science An Overview _J. Glenn Brookshear _11th Edition To solve such problems, a DBMS could ...
- Android轻量缓存框架--ASimpleCache
[转] 大神真面目 稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! ...
- 【转】C#中HttpWebRequest的用法详解
本文实例讲述了C#中HttpWebRequest的用法.分享给大家供大家参考.具体如下: HttpWebRequest类主要利用HTTP 协议和服务器交互,通常是通过 GET 和 POST 两种方式来 ...
- 打造 PHP版本 1password
以前注册很多网站密码都使用简单密码,但是由于今年频繁曝出密码不安全问题,所以要使用更加复杂的密码.但是好多个账号,密码也不能设置成一样的,防止一个被盗全部不安全了,记密码就成了意见很头疼的事情. 在手 ...
- BLE-NRF51822教程18-overview
转自:http://blog.csdn.NET/xgbing 蓝牙协议栈 nrf51822开发中,蓝牙协议栈和应用开发是分开的. (1)兼容蓝牙4.0低功耗协议栈基带层,L2CAP\AAT\SM\GA ...
- C/C++的编译器|编译环境(非常全面的比较)
C/C++编译器的一些易混淆概念,总结一下. 关于什么是Unix-like操作系统,常见操作系统间差异,什么是操作系统接口等等,请参考<操作系统宝鉴>. C/C++编译器有哪些? 首先是如 ...
- 基于vs2005以上版本Qt程序发布的注意事项(讲了manifest的问题)
最近发现了一个非常恼人的程序deployment的问题,估计大家有可能也会遇到,特此memo. 问题的出现我觉得主要还是微软搞的花头太多, 一个不知所谓的manifest文件让本来简单的程序发布变得困 ...
- Android笔记-获取图片
1. 图片放在sdcard中,根据路径获得: Bitmap imageBitmap = BitmapFactory.decodeFile(path) (path 是图片的路径,跟目录是/sdcard ...