我正在尝试实现一个可以处理多个参数的url。例如:
-
如果我想获得id为1=>
project/1
-
如果我想获得id为2的项目=>
project/2
-
如果我想获得id为1并且2=>
project/1/2
-
如果我想获得id为1、2和3的项目=>
project/1/2/3
有没有任何方法可以在不为N种可能性硬编码N个url的情况下实现这个逻辑?
你可以这样做:
re_path(r'^project/(?P<id_list>[1-9][0-9]*(?:/[1-9][0-9]+)*)$', your_view),
然后在您的视图中再次拆分id列表:
ids = id_list.split('/')
使用sane视图可以有多个URLS,一旦视图启动,它们就可以询问自己的kwarg。
path('project/<first:int>/<second:int>/<third:int/', MyView.as_view(), name='project_3args'),
path('project/<first:int>/<second:int>/', MyView.as_view(), name='project_2args'),
path('project/<first:int>/', MyView.as_view(), name='project_1arg'),
(订单可能很重要,把最长的放在第一位。从来没有这样做过(
在看来,类似的东西
third = self.kwargs.get('third', None)
if third:
# process 3-arg form
对于每个数量的参数,您确实需要一个url。
或者,如果你只想要一个以斜线分隔的列表,并且对项目数量没有(小(限制,那么Boldewyn使用re_path
也没有错。
最后还有请求。如果您决定使用类似的东西,请获取
/project_foo/?item=1&item=47&item=97
request.Get.getlist('item')
将返回['1','47','97']
。GET Querystring是最通用的,因为任何东西都可以通过这种方式以一口大小的片段提供。