Django:一个url用于多个参数



我正在尝试实现一个可以处理多个参数的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是最通用的,因为任何东西都可以通过这种方式以一口大小的片段提供。

最新更新