高质量的url

bigzhu posted @ May 23, 2007 03:40:00 AM in django , 1817 阅读

还记得带参数的url吗?java和php构建的web程序中,经常可以见到这种? &漫天飞的url:
比如想要3个小时以后的时间,可能就会这样:/now/plus?hours=3
混乱而且土
django利用python强大的正则表达式避免了这个问题,
同一个问题,django可以这样传参:
/now/plus3hours/
更加简洁优雅
因为数字是变化的,url匹配自然需要更改:
(r'^now/plus\d{1,2}hours/$', hours_ahead),
表示匹配1位或2位数值,3位以上的数值这里就界定为非法数据,不再匹配,否则用户输入一个/now/plus99999999999999999999hours/怎么办?
写好url匹配,需要写对应的处理:hours_ahead
hours_ahead如何才能从url取得参数呢?
通过django调用函数的时候,首先传入一个必要参数HttpResponse对象.这是必有的
而后对于动态匹配url的,会传入一个string,这个string就是动态匹配的内容,如果是上面的url,那自然就是传入’3′
如果url匹配多个值?如何传入?这个稍后说.
def hours_ahead(request, offset):
offset = int(offset)
dt = datetime.datetime.now() datetime.timedelta(hours=offset)
html = "In %s hour(s), it will be %s." % (offset, dt)
return HttpResponse(html)

把string转为int,然后想干嘛就干嘛,这里就不废话了..
打开http://127.0.0.1:8000/now/plus3hours/看看是否正确的干活了


zhengjc 说:
Jul 18, 2011 04:44:08 PM

问个问题啊,这url里面传值的比如/admin/puser/user?q=add这种方式的话,在admin.ModelAdmin 中可以直接用get将参数获取出来,但是把q换成其他的参数就不能用了,为什么呢?有什么好的办法没有啊??


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter