簡體   English   中英

如何在 django URL 中使用可選參數

[英]How to use an optional parameter in django URL

我想要 Django URL 如何在沒有任何可選參數或可選參數的情況下工作的解決方案。

這是我想要的 URL 結構:

path('<slug:category_slug>-comparison/<slug:brand_slug1>-vs-<slug:brand_slug2>-vs-<slug:brand_slug3>/',views.compare_brand)

現在我想要像 1st 兩個 slugs 這樣的比較是強制性的,所以,根據上面的 URL

path('<slug:category_slug>-comparison/<slug:brand_slug1>-vs-<slug:brand_slug2>',views.compare_brand)

這工作正常,因為這是強制性的 url 參數,但我想將可選的 url 從第二個“vs”傳遞給brand_slug3。

任何人都可以幫助我嗎?

你不能在 django urls.py 中這樣做。 但是您可以將 URL 查詢字符串傳遞給視圖。 例如,如果你點擊這個網址:

http://localhost:8000/Category1-comparison/Brand1-vs-Brand2/?vs=Brand3

然后您可以從request.GET Brand3值。 像這樣:

def compare_brand(request, category_slug, brand_slug1, brand_slug2):
     brand_slug3 = request.GET.get('vs')

更好的解決方案:

也許更好的方法是一起使用 URL 查詢字符串。 因為,這樣網址會更干凈。 例如:

# url

path('/comparison/<slug:category_slug>/', compare_brand)

# view
def compare_brand(request, category_slug):
    brands = request.GET.getlist('brands')
    if len(brands) < 2:
        raise Exception('Need 2 brands atleast')

# browser url
http://localhost:8000/comparison/Cat1/?brands=Brand1,Brand2

來自評論

您可以創建另一個指向同一視圖的 url

# url
path('<slug:category_slug>-comparison/<slug:brand_slug1>-vs-<slug:brand_slug2>-vs-<slug:brand_slug3>/',views.compare_brand),
path('<slug:category_slug>-comparison/<slug:brand_slug1>-vs-<slug:brand_slug2>/',views.compare_brand)

# view

def compare_brand(request, category_slug, brand_slug1, brand_slug2, brand_slug3=None):
    if brand_slug3:
       # do something

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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