gpt4 book ai didi

regex - Django urlpatterns 令人沮丧的斜杠问题

转载 作者:行者123 更新时间:2023-12-03 23:32:52 25 4
gpt4 key购买 nike

我能找到的所有 django 站点的 urlpatterns 示例都有一个单独的条目,用于输入没有前导斜杠或根文件夹的 url。然后他们处理每一行的子文件夹。我不明白为什么一个简单的

/?

正则表达式不允许这些在一个简单的行上。

考虑以下情况,我们将 Django 项目称为 Baloney,App 名称为 Cheese。所以在项目 urls.py 我们有这样的东西来允许应用程序 urls.py 处理它的请求......

urlpatterns = patterns('',
(r'^cheese/', include('Baloney.Cheese.urls')),
)

然后在 Cheese 应用程序 urls.py 中,我不明白为什么这一简单的行不会触发所有传入的 url 子路径,包括一个空白值......

urlpatterns = patterns('',
(r'^(?P<reqPath>.*)/?$', views.cheeseapp_views),
)

相反,它匹配空白大小写,但不匹配存在值的大小写。所以...

http://baloneysite.com/cheese/        -->   MATCHES THE PATTERN
http://baloneysite.com/cheese/swiss --> DOES NOT MATCH

基本上我想捕获 reqPath 变量以包含任何内容(甚至是空白或''),但不包括任何尾随斜杠(如果有的话)。

url 是从数据库中提取的动态 slug,因此我会在 View 中匹配所有内容,并且只需要 url 模式来转发值。我知道以下工作,但不明白为什么不能将其全部与/放在一行?结束 $ 符号之前的正则表达式。

(r'^$', views.cheeseapp_views, {'reqPath':''}),
(r'^(?P<reqPath>.*)/$', views.cheeseapp_views),

欣赏任何见解。

最佳答案

我刚刚尝试了一个类似的示例,它就像您编写的那样工作。不需要/?, .* 无论如何都会匹配。你得到的确切错误是什么?也许您在没有请求参数的情况下有您的看法? IE。 views.cheeseapp_views 应该是这样的:

def cheeseapp_views(request, reqPath):
...

编辑:

您建议的模式将尾部斜杠捕获到 reqPath 中,因为 * 运算符是贪婪的(看看 docs.python.org/library/re.html )。试试这个:

(r'^(?P<reqPath>.*?)/?$', views.cheeseapp_views) 

注意它是 .*?而不是 .* 使其不贪婪。

关于regex - Django urlpatterns 令人沮丧的斜杠问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com