首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中,使用urlpatterns,如何将url编码的斜杠字符作为参数的一部分进行匹配?

在Django中,使用urlpatterns,如何将url编码的斜杠字符作为参数的一部分进行匹配?
EN

Stack Overflow用户
提问于 2022-09-07 00:06:23
回答 1查看 190关注 0票数 3

在我的Django应用程序中,我有以下的have模式:

代码语言:javascript
复制
urlpatterns = [
    url(r'^$', schema_view, name='swagger'),
    url(r'^(?P<page_title>.+)/(?P<rev_id>[0-9]+)/$',
        WhoColorApiView.as_view(), name='wc_page_title_rev_id'),
    url(r'^(?P<page_title>.+)/$',
        WhoColorApiView.as_view(), name='wc_page_title'),
]

第二个条目将匹配像/en/whocolor/v1.0.0-beta/my_book_title/1108730659/?origin=*这样的路径,第三个条目将匹配像/en/whocolor/v1.0.0-beta/my_book_title/?origin=*这样的路径。

其思想是,它匹配一个page_title参数(维基百科文章标题)和一个可选的整数rev_id (修订id)参数。

然而,它的工作方式并不像一篇题为“9.11事件后”的文章( path /en/whocolor/v1.0.0-beta/Post-9%2f11/?origin=* )。我希望这不匹配第二个模式(它被匹配为page_title "Post-9“和rev_id 11),而是匹配第三个模式。

如果路径是/en/whocolor/v1.0.0-beta/Post-9/11/?origin=*,我理解为什么第二个模式应该匹配,但是当标题被url编码为"Post-9%2f11“时,它仍然匹配第二个模式,而不是继续到第三个模式。

如何使Django将url编码的斜杠视为参数的一部分而不是路径分隔符?

EN

回答 1

Stack Overflow用户

发布于 2022-09-10 09:45:39

在Django中有一种叫做路径转换器的东西。

现有的路径转换器之一是用斜线来处理事情。

path -匹配任何非空字符串,包括路径分隔符'/‘。这允许您与完整的URL路径匹配,而不是像str那样匹配URL路径的一部分。

代码语言:javascript
复制
path('<path:page_title>/',
         views.post_detail,
         name='post_detail'),

当你使用路径时,你不需要逃避任何东西,它就能工作。有许多类似OP的例子,其中Path被用作解决方案,例如:

正如伊万·斯塔尔斯丁( Ivan Starostin 评论中提到的 )所言,OP实际上应该使用路径转换器段塞。

根据医生的说法

段塞是某物的短标签,只包含字母、数字、下划线或连字符。

例如,building-your-1st-django-site

为此,建议OP在模型中使用SlugField类型的字段。

代码语言:javascript
复制
slug = models.SlugField(max_length=250)

然后在urls.py

代码语言:javascript
复制
path('<slug:post>/',
         views.post_detail,
         name='post_detail'),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73628806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档