san*_*joe 2 regex django url-pattern urlconf
我可以找到django站点的urlpatterns的所有示例都有一个单独的条目,用于没有前导斜杠的传入URL或根文件夹.然后他们处理每条线上的子文件夹.我不明白为什么简单
/?
Run Code Online (Sandbox Code Playgroud)
正则表达式不允许这些在一个简单的行上.
考虑以下情况,让我们调用Django项目Baloney,App名称是Cheese.所以在项目urls.py中我们有类似的东西允许应用程序urls.py处理它的请求...
urlpatterns = patterns('',
(r'^cheese/', include('Baloney.Cheese.urls')),
)
Run Code Online (Sandbox Code Playgroud)
然后在Cheese应用程序urls.py中,我不明白为什么这一条简单的行不会对所有传入的url子路径都触发,包括空值...
urlpatterns = patterns('',
(r'^(?P<reqPath>.*)/?$', views.cheeseapp_views),
)
Run Code Online (Sandbox Code Playgroud)
相反,它匹配空白案例,但不是存在值的情况.所以...
http://baloneysite.com/cheese/ --> MATCHES THE PATTERN
http://baloneysite.com/cheese/swiss --> DOES NOT MATCH
Run Code Online (Sandbox Code Playgroud)
基本上我想捕获reqPath变量以包含任何内容(甚至是空白或''),但如果有的话,不包括任何尾部斜杠.
网址是从数据库中提取的动态slu ..所以我在视图中完成所有匹配内容,只需要url模式来转发值.我知道以下工作,但不明白为什么这不能全部放在一行/?结束$符号前的正则表达式.
(r'^$', views.cheeseapp_views, {'reqPath':''}),
(r'^(?P<reqPath>.*)/$', views.cheeseapp_views),
Run Code Online (Sandbox Code Playgroud)
欣赏任何见解.
我刚试了一个类似的样本,它就像你写的一样工作.不需要/?,.*无论如何都会匹配.你得到的确切错误是什么?也许你的视图没有请求参数?即views.cheeseapp_views应该是这样的:
def cheeseapp_views(request, reqPath):
...
Run Code Online (Sandbox Code Playgroud)
编辑:
您建议的模式将尾部斜杠捕获到reqPath中,因为*运算符是贪婪的(请参阅docs.python.org/library/re.html).试试这个:
(r'^(?P<reqPath>.*?)/?$', views.cheeseapp_views)
Run Code Online (Sandbox Code Playgroud)
注意它是.*?而不是.*使它不贪婪.
| 归档时间: |
|
| 查看次数: |
5279 次 |
| 最近记录: |