假设我有一个可以捕获多个参数的网址。 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行传递给视图的参数?
答案 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
因此,对于更具可读性的内容,这取决于你。