Django笔记 通过URL传递参数的4种方法 + 补充
来源:互联网 发布:linux更改文件权限777 编辑:程序博客网 时间:2024/06/05 09:03
【转自ian的个人博客】 和 补充
感谢ian的总结!
1. 无参数情况
配置URL及其视图如下:
(r’^hello/$’, hello)
def hello(request): return HttpResponse("Hello World")
访问http://127.0.0.1:8000/hello,输出结果为“Hello World”
2 、传递一个参数
配置URL及其视图如下,URL中通过正则指定一个参数:
(r’^plist/(.+)/$’, helloParam)
def helloParam(request,param1): return HttpResponse("The param is : " + param1)
访问http://127.0.0.1:8000/plist/china,输出结果为”The param is : china”
3 传递多个参数
参照第二种情况,以传递两个参数为例,配置URL及其视图如下,URL中通过正则指定两个参数:
(r’^plist/p1(\w+)p2(.+)/$’, helloParams)
def helloParams(request,param1,param2): return HttpResponse("p1 = " + param1 + "; p2 = " + param2)
访问http://127.0.0.1:8000/plist/p1chinap22012/
输出为”p1 = china; p2 = 2012″
从这里可以看出,视图的参数是根据URL的正则式,按顺序匹配并自动赋值的。虽然这样可以实现任意多个参数的传递,但是却不够灵活,URL看起来很混乱,而且由于是正则匹配,有些情况下容易出错。
4 通过传统的”?”传递参数
例如,http://127.0.0.1:8000/plist/?p1=china&p2=2012,url中‘?’之后表示传递的参数,这里传递了p1和p2两个参数。
通过这样的方式传递参数,就不会出现因为正则匹配错误而导致的问题了。在Django中,此类参数的解析是通过request.GET.get方法获取的。
配置URL及其视图如下:
(r’^plist/$’, helloParams1)
def helloParams(request): p1 = request.GET.get('p1') p2 = request.GET.get('p2') return HttpResponse("p1 = " + p1 + "; p2 = " + p2)
输出结果为”p1 = china; p2 = 2012″
5、使用关键字参数而非位置参数
在 Python 正则表达式中,命名的正则表达式组的语法是 (?Ppattern) ,这里 name 是组的名字,而
pattern 是匹配的某个模式。
下面是一个使用无名组的 URLconf 的例子:
from django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^articles/(\d{4})/$', views.year_archive),(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),)
下面是相同的 URLconf,使用命名组进行了重写:
from django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^articles/(?P<year>\d{4})/$', views.year_archive),(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),)
这段代码和前面的功能完全一样,只有一个细微的差别: 取的值是以关键字参数的方式而不是以位置参数的方
式传递给视图函数的。
例如,如果不带命名组,请求 /articles/2006/03/ 将会等同于这样的函数调用:
month_archive(request, '2006', '03')
而带命名组,同样的请求就会变成这样的函数调用:
month_archive(request, year='2006', month='03')
使用命名组可以让你的URLconfs更加清晰,减少搞混参数次序的潜在BUG,还可以让你在函数定义中对参数重新排序。 接着上面这个例子,如果我们想修改URL把月份放到 年份的 前面 ,而不使用命名组的话,我们就不得不去修改视图 month_archive 的参数次序。 如果我们使用命名组的话,修改URL里提取参数的次序对视图没有影响。
当然,命名组的代价就是失去了简洁性: 一些开发者觉得命名组的语法丑陋和显得冗余。 命名组的另一个好处就是可读性强。
需要注意的是如果在URLconf中使用命名组,那么命名组和非命名组是不能同时存在于同一个URLconf的模式中的。 如果你这样做,Django不会抛出任何错误,但你可能会发现你的URL并没有像你预想的那样匹配正确。
具体地,以下是URLconf解释器有关正则表达式中命名组和 非命名组所遵循的算法:
- × 如果有任何命名的组,Django会忽略非命名组而直接使用命名组。
- × 否则,Django会把所有非命名组以位置参数的形式传递。
× 在以上的两种情况,Django同时会以关键字参数的方式传递一些额外参数。
更具体的信息可参考下一节。
- Django笔记 通过URL传递参数的4种方法 + 补充
- Django通过URL传递参数的4种方法
- Django通过URL传递参数的4种方法
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结
- Django URL传递参数的方法总结(转)
- Django URL传递参数的方法总结(转)
- Django URL传递参数的方法总结(转)
- Django URL传递参数的方法总结(转)
- 六.Django中URL的参数传递
- URL中传递URL参数的方法
- Android更新UI解析
- oracle存储过程接收自定义数组类型参数
- Android在EditText光标所在位置插入和删除字符串
- Java几种线程池类型介绍及使用
- jsp getRows()与 getRowCount()
- Django笔记 通过URL传递参数的4种方法 + 补充
- BP神经网络预测
- Linux ftp 远程文件传输
- Same Tree (JAVA实现)
- HDU1159poj1458Common Subsequence最长公共子序列
- Markdown 语法说明 (简体中文版)
- Parajumpers Jacka read to born for you at
- scrollerView与侧滑菜单滑动冲突的问题(自定义view结合事件传递机制实例分析)
- Oracle 常用函数实例总结