如何为Django URL格式化两个参数,其中任意一个参数都是可选的?

3
我正在设计一个用于查看车辆图片的画廊应用程序,其中有两个参数:
  1. 制造商
  2. 车型
目前您只能查看其中一个参数,而不能同时查看两个。URL如下所示:
  1. /manufacturer/#
  2. /type/#
其中#是ID号码。我该如何/能够格式化我的URL,以便可以同时接受两个参数? 我目前的解决方案是:/both/#/#,但这需要进行一些重新调整,因为应用程序不知道您想要按两个参数进行过滤。 如有任何疑问,请告诉我。
2个回答

2
如果你处于两种可选情况之一的情况下,也许最好的选择是通过GET参数来处理。

你的意思是你的URL看起来像这样 http://example.com/view?manufacturer=foohttp://example.com/view?type=bar&manufacturer=baz 吗?我认为Django社区认为这样的GET参数很丑陋,最好避免使用。 - blokeley
是的,尽可能避免使用它们。然而,GET参数存在是有原因的,在某些情况下,至少在我看来,如果在逻辑上有意义,使用它们是可以接受的。 - digitaldreamer
我该如何在不使用非常严格的URL(需要指定两个参数)的情况下实现这一点呢?遵循使应用程序更难处理的URL标准似乎是愚蠢的。 - Parker

0

也许这个方案适合你:

views.py:

def filtered_view (request, manufacturer_id=None, type_id=None):
    ...

urls.py:

    ...
    url(r'^manufacturer/(?P<manufacturer_id>[0-9]+)/((?P<type_id>[0-9])/)?$', filtered_view),
    url(r'^type/(?P<type_id>[0-9]+)/((?P<manufacturer_id>[0-9])/)?$', filtered_view),
    ...

根据用户在网站上的操作方式,URL可能是/manufacturer/123//manufacturer/123/456//type/456/或者/type/456/123/(其中123是制造商ID,456是车辆类型ID)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接