如何在 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从第2个“vs”传递到brand_slug3。

任何人都可以帮我吗?


幕布斯6054654
浏览 149回答 1
1回答

桃花长相依

你不能在django urls.py 这样做。但是,您可以将 URL 查询字符串传递给视图。例如,如果您点击此网址:http://localhost:8000/Category1-comparison/Brand1-vs-Brand2/?vs=Brand3然后,您可以从 中获取值。喜欢这个:Brand3request.GETdef compare_brand(request, category_slug, brand_slug1, brand_slug2):&nbsp; &nbsp; &nbsp;brand_slug3 = request.GET.get('vs')更好的解决方案:也许更好的方法是一起使用URL查询字符串。因为,这样网址会更干净。例如:# urlpath('/comparison/<slug:category_slug>/', compare_brand)# viewdef compare_brand(request, category_slug):&nbsp; &nbsp; brands = request.GET.getlist('brands')&nbsp; &nbsp; if len(brands) < 2:&nbsp; &nbsp; &nbsp; &nbsp; raise Exception('Need 2 brands atleast')# browser urlhttp://localhost:8000/comparison/Cat1/?brands=Brand1,Brand2从评论您可以创建另一个指向同一视图的网址# urlpath('<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)# viewdef compare_brand(request, category_slug, brand_slug1, brand_slug2, brand_slug3=None):&nbsp; &nbsp; if brand_slug3:&nbsp; &nbsp; &nbsp; &nbsp;# do something
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python