2013-02-27 48 views
0

假设我有一个可捕获多个参数的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行传递给视图?

回答

3

你唯一的限制就是查询字符串的长度(据我所知),因浏览器而异。有关更多详细信息,请参见this Stack Overflow question

只要让URL更具可读性,或只提取需要的参数,这有点主观。

如果你希望你的URL来显式的,你可以继续做你正在做什么,通过传递命名的参数,但你可以改变你的方法签名简单:

def some_view(request, *args, **kwargs): 
    # more code here 

,然后检索arg或kwarg,如果不存在,则返回None

您还可以传递与查询字符串参数相同的值。如果您这样做了,则根本无需在视图中定义任何参数或kwargs,只需从request.GET字典中提取值即可,如果未找到密钥,则返回None

所以,这真的取决于你什么更可读。

+0

我的问题不是查询字符串的长度。这是关于传递比查询字符串中找到的更少的参数。如果查询字符串提供了几个参数(为了URL可读性),但我只想要这几个参数中的一个呢? – Cole 2013-02-27 19:05:30

+1

我已经用一些更多的想法增强了我的答案。 – Brandon 2013-02-27 19:11:38

+0

感谢您的额外想法。它给了我一个很好的方向感! – Cole 2013-02-27 20:06:51