簡體   English   中英

如何在 django 中傳遞多個可選的 URL 參數?

[英]How to pass multi optional URL parameters in django?

如何傳遞多個可選的 URL 參數?

例如,我想要傳遞 2 個參數: my_colormy_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_colormy_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM