【发布时间】:2011-03-11 14:11:35
【问题描述】:
我正在开发的 Django 应用程序的 URL 组件非常“可插入”,它们的不同组合用于各种 urlpatterns,所以我们的 urls.py 看起来像:
rev = r'(/R\.(?P<rev>\d+))?'
repo_type= r'^(?P<repo_type>svn|hg)/'
path = r'/dir/(?P<path>.*)$'
# etc.
urlpatterns = patterns('',
(repo_type_param + r'view-source' + opt_rev_param + path_param, view_source),
(repo_type_param + r'history' + path_param, history),
(repo_type_param + r'revision' + opt_rev_param + r'/$', revision),
) #etc.
这似乎是保持清洁的好方法。但是,当我尝试反转 urlpatterns 指向的任何视图时,我发现我不断收到 NoReverseMatch 错误。经过大量的修改,我发现在模式中使用完整的原始字符串,而不是连接子字符串,解决了这个问题。
那么,真的有必要在 urlpatterns 中只使用原始字符串吗?我在任何地方都找不到这个记录。错误或功能?必须复制和粘贴重复使用的正则表达式模式似乎违反了 DRY。
【问题讨论】:
-
python 喜欢遵循的一件事是显式优于隐式 - 这可能是不允许连接的可能原因。虽然如果没有办法做你所追求的,我会感到非常惊讶。 :-)