Django将选择网址参数传递给视图
问题描述:
假设我有一个可捕获多个参数的url。例如:Django将选择网址参数传递给视图
url(r'^(?P<l_slug>[-\w]+)/(?P<t_slug>[-\w]+)/(?P<event_id>\d+)/$', 'views.SomeView'),
而且在某些情况下,SomeView只需要一个参数中:例如:
def SomeView(request, event_id):
return HttpResponse('hi {}'.format(event_id))
我一直在处理这个问题的方法是:
def SomeView(request, l_slug=None, t_slug=None, event_id=None):
return HttpResponse('hi {}'.format(event_id))
有一些什么来限制什么参数从URL行传递给视图?
答
你唯一的限制就是查询字符串的长度(据我所知),因浏览器而异。有关更多详细信息,请参见this Stack Overflow question。
只要让URL更具可读性,或只提取需要的参数,这有点主观。
如果你希望你的URL来显式的,你可以继续做你正在做什么,通过传递命名的参数,但你可以改变你的方法签名简单:
def some_view(request, *args, **kwargs):
# more code here
,然后检索arg或kwarg,如果不存在,则返回None
。
您还可以传递与查询字符串参数相同的值。如果您这样做了,则根本无需在视图中定义任何参数或kwargs,只需从request.GET
字典中提取值即可,如果未找到密钥,则返回None
。
所以,这真的取决于你什么更可读。
我的问题不是查询字符串的长度。这是关于传递比查询字符串中找到的更少的参数。如果查询字符串提供了几个参数(为了URL可读性),但我只想要这几个参数中的一个呢? – Cole 2013-02-27 19:05:30
我已经用一些更多的想法增强了我的答案。 – Brandon 2013-02-27 19:11:38
感谢您的额外想法。它给了我一个很好的方向感! – Cole 2013-02-27 20:06:51