代码之家  ›  专栏  ›  技术社区  ›  Kovy Jacob

Django在动态URL段中添加斜线

  •  0
  • Kovy Jacob  · 技术社区  · 9 月前

    我有一个动态url配置如下:

    path('segment/', func1, name='func1'),
    path('segment/<str:string>/', string, name='string'),
    

    然而,当我去 https://example.com/segment/watch?v=nTeq0U_V15U ( watch?v=nTeq0U_V15U 作为字符串),斜线会自动添加到中间,使其 https://example.com/segment/watch/?v=nTeq0U_V15U/ 有趣的是,即使我没有3段的URL模式,也不会抛出404错误 urls.py 然而,我的问题是,为什么要加上斜线,我该如何避免?

    1 回复  |  直到 9 月前
        1
  •  1
  •   willeM_ Van Onsem    9 月前

    然而,我的问题是,为什么要添加斜线,我该如何避免?

    因为 APPEND_SLASH setting [Django-doc] ,默认设置为 True .

    当没有找到给定路径的匹配项,并且路径不是以斜线结尾时,这将执行 重定向 指向带斜线的路径,因此浏览器将尝试获取以斜线结尾的页面。

    但这个问题表明了一些 误解 .事实上,如果你写:

    https://example.com/segment/watch?v=nTeq0U_V15U
           \___ ______/\______ _____/\_____ ______/
               v              v            v
            hostname        path       querydict
    

    然后 ?v=nTeq0U_V15U 部分 路径 ,它是 查询字典 ,所以它会 比赛 <str:string> ,仅 watch 将。

    因此,您在视图中将其检索为:

    def string(request, string):
        # string will be 'watch'
        print(request.GET['v'])  # nTeq0U_V15U
        # …
    推荐文章