Py学习  »  Django

如何在django URL中使用可选参数

Sahil shaikh • 5 年前 • 1775 次点击  

我想要解决Django 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)

这很好,因为这是必需的url参数,但我想把可选的url从第二个'vs'传递到brand_slug3。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55312
 
1775 次点击  
文章 [ 1 ]  |  最新文章 5 年前
ruddra
Reply   •   1 楼
ruddra    5 年前

在django urls.py中不能这样做。但是可以向视图传递URL查询字符串。例如,如果您点击此url:

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

Brand3 价值来源 request.GET . 这样地:

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

更好的解决方案:

也许更好的方法是将URL查询字符串一起使用。因为那样的话,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