为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2022-08-11 20:10:41
我想要Django URL如何在没有任何可选参数或可选参数的情况下工作的解决方案。以下是我想要的URL结构:path('<slug:category_slug>-comparison/<slug:brand_slug1>-vs-<slug:brand_slug2>-vs-<slug:brand_slug3>/',views.compare_brand)现在我想要像1st两个slugs这样的东西进行比较是强制性的,所以,根据上面的URLpath('<slug:category_slug>-comparison/<slug:brand_slug1>-vs-<slug:brand_slug2>',views.compare_brand)这工作正常,因为这是必需的url参数,但我想将可选url从第2个“vs”传递到brand_slug3。任何人都可以帮我吗?
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

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


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

然后,您可以从 中获取值。喜欢这个:Brand3request.GET


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

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


查看完整回答
反对 回复 2022-08-11
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号