Компоненты URL-адресов приложения Django, над которым я работаю, очень «подключаемые», и их различные комбинации используются в разных 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.
Что кажется хорошим способом сохранить вещи в чистоте. Однако я обнаружил, что получаю ошибки NoReverseMatch, когда пытаюсь отменить любое из представлений, на которые указывают urlpatterns. После долгих попыток я обнаружил, что использование полной необработанной строки в шаблоне вместо конкатенации подстрок решило проблему.
Итак, действительно ли необходимо использовать только необработанные строки в urlpatterns? Я не мог найти это нигде. Баг или фича? Необходимость копировать и вставлять шаблоны регулярных выражений, которые используются неоднократно, кажется нарушением DRY.