0

假设我有一个捕获多个参数的 url。例如:

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

4

1 回答 1

3

您唯一的限制是查询字符串的长度(据我所知),这因浏览器而异。有关更多详细信息,请参阅此 Stack Overflow 问题

至于使 URL 更具可读性,或者只提取您需要的参数,这有点主观。

如果您希望您的 URL 显式,您可以通过传入命名参数继续做您正在做的事情,但您可以将您的方法签名更改为简单地:

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

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

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

因此,什么更具可读性完全取决于您。

于 2013-02-27T18:55:03.293 回答