Предположим, что у меня есть 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-адресов (инкапсуляция и все такое).