Предположим, у меня есть URLconf, как показано ниже, и 'foo'
и 'bar'
являются допустимыми значениями для page_slug
.
urlpatterns = patterns('',
(r'^page/(?P<page_slug>.*)/', 'myapp.views.someview'),
)
Тогда я мог бы восстановить URL-адреса с помощью приведенного ниже, верно?
>>> from django.core.urlresolvers import reverse
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'foo'})
'/page/foo/'
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'bar'})
'/page/bar/'
Но что, если я изменю свой URLconf на этот?
urlpatterns = patterns('',
(r'^foo-direct/', 'myapp.views.someview', {'page_slug': 'foo'}),
(r'^my-bar-page/', 'myapp.views.someview', {'page_slug': 'bar'}),
)
Я ожидал этого результата:
>>> from django.core.urlresolvers import reverse
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'foo'})
'/foo-direct/'
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'bar'})
'/my-bar-page/'
Однако это вызывает исключение NoReverseMatch
. Я подозреваю, что пытаюсь сделать что-то невозможное. Какие-нибудь предложения относительно более разумного способа достигнуть того, что я хочу?
Именованные URL-адреса не подходят, так как я не хочу, чтобы другие приложения, ссылающиеся на них, должны были знать о специфике структуры URL (инкапсуляция и все такое).