[英]How to pass multi optional URL parameters in django?
如何傳遞多個可選的 URL 參數?
例如,我想要傳遞 2 個參數: my_color
和my_year
,但它們是可選的,因此可能不會傳遞它們中的任何一個,可能兩者都傳遞,或者可能只有一個。
目前在urls.py
我有:
urlpatterns = [
re_path(r'^products/(?P<my_color>.*)/(?P<my_year>.*)$', some_view),
]
這顯然是不正確的,只有當它們都通過時才有效。
什么是正確的解決方案?
PS 當只需要傳遞一個可選參數時,我找到了答案,但不知道如何對少數參數執行相同的操作。 在這種情況下,“多路由選項”似乎也不是解決方案(?)
如果myyear
是一個數字序列,而mycolor
是一個非數字序列,則可以使用
urlpatterns = [
re_path(r'^products/((?P<my_color>\D+)/)?(?P<my_year>\d+)$', 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/<int:year>/'),
path(r'^products/<str:color>/'),
path(r'^products/<str:color>/<int:year>/', some_view),
]
因此,您可以在此處為同一視圖定義四個視圖。 然后視圖可以定義可選參數:
def some_view(request, color=None, year=None):
# …
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.