如何在 Django 中传递多个可选 URL 参数?
How to pass multi optional URL parameters in django?
如何传递多个可选的 URL 参数?
例如,我想传递 2 个参数:my_color
和 my_year
,但它们是可选的,因此可能会传递其中的 none,可能两者都传递,或者可能只有一个。
目前在 urls.py
我有 :
urlpatterns = [
re_path(r'^products/(?P<my_color>.*)/(?P<my_year>.*)$', some_view),
]
这显然是不正确的,只有在两个都通过时才有效。
什么是正确的解决方案?
P.S。
当只需要传递一个可选参数时,我找到了答案,但不知道如何为少数参数做同样的事情。此外,在这种情况下,“多路由选项”似乎不是解决方案 (?)
如果myyear
是位的序列,而mycolor
是non-digits[=34的序列=],你可以使用
urlpatterns = [
re_path(r'^products/((?P<my_color><b>\D+</b>)/)?(?P<my_year><b>\d+</b>)$', some_view),
]
如果 my_color
或 my_year
不存在,这将为相应的元素传递一个 空字符串 。因此,您可以编写如下所示的视图:
def some_view(request, my_color, my_year):
if my_color:
# …
if my_year:
# …
如果两者具有相同的字符序列,这不可能,因为您将如何解释products/bla
? bla
是颜色还是年份?
话虽这么说,我认为你把它搞得太复杂了。可以定义四种模式,例如:
urlpatterns = [
path(r'^products/', some_view),
path(r'^products/<<b>int:</b>year>/'),
path(r'^products/<<b>str:</b>color>/'),
path(r'^products/<<b>str:</b>color>/<<b>int:</b>year>/', some_view),
]
因此,您在这里为同一视图定义了四个视图。然后视图可以定义可选参数:
def some_view(request, color<b>=None</b>, year<b>=None</b>):
# …
如何传递多个可选的 URL 参数?
例如,我想传递 2 个参数:my_color
和 my_year
,但它们是可选的,因此可能会传递其中的 none,可能两者都传递,或者可能只有一个。
目前在 urls.py
我有 :
urlpatterns = [
re_path(r'^products/(?P<my_color>.*)/(?P<my_year>.*)$', some_view),
]
这显然是不正确的,只有在两个都通过时才有效。
什么是正确的解决方案?
P.S。 当只需要传递一个可选参数时,我找到了答案,但不知道如何为少数参数做同样的事情。此外,在这种情况下,“多路由选项”似乎不是解决方案 (?)
如果myyear
是位的序列,而mycolor
是non-digits[=34的序列=],你可以使用
urlpatterns = [
re_path(r'^products/((?P<my_color><b>\D+</b>)/)?(?P<my_year><b>\d+</b>)$', some_view),
]
如果 my_color
或 my_year
不存在,这将为相应的元素传递一个 空字符串 。因此,您可以编写如下所示的视图:
def some_view(request, my_color, my_year):
if my_color:
# …
if my_year:
# …
如果两者具有相同的字符序列,这不可能,因为您将如何解释products/bla
? bla
是颜色还是年份?
话虽这么说,我认为你把它搞得太复杂了。可以定义四种模式,例如:
urlpatterns = [
path(r'^products/', some_view),
path(r'^products/<<b>int:</b>year>/'),
path(r'^products/<<b>str:</b>color>/'),
path(r'^products/<<b>str:</b>color>/<<b>int:</b>year>/', some_view),
]
因此,您在这里为同一视图定义了四个视图。然后视图可以定义可选参数:
def some_view(request, color<b>=None</b>, year<b>=None</b>):
# …