[英]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.