Django将选择的url参数传递给视图

时间:2013-02-27 18:45:36

标签: python django url-routing

假设我有一个可以捕获多个参数的网址。 E.g:

url(r'^(?P<l_slug>[-\w]+)/(?P<t_slug>[-\w]+)/(?P<event_id>\d+)/$', 'views.SomeView'),

在某些情况下,SomeView只需要其中一个参数:E.g:

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行传递给视图的参数?

1 个答案:

答案 0 :(得分:3)

你唯一的限制是查询字符串的长度(据我所知),这取决于浏览器。有关详细信息,请参阅this Stack Overflow question

至于使URL更具可读性,或仅提取所需的args,这有点主观。

如果您希望您的网址是显式的,您可以通过传入命名参数继续执行您正在执行的操作,但您可以将方法签名更改为:

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

然后检索你需要的arg或kwarg,如果它不存在则返回None

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

因此,对于更具可读性的内容,这取决于你。