社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

Sahil shaikh • 5 年前 • 1613 次点击  

我想要解决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
 
1613 次点击  
文章 [ 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