Załóżmy, że mam URLconf jak poniżej, a 'foo'
i 'bar'
są poprawnymi wartościami dla page_slug
.Cofanie adresów URL Django dodatkowymi opcjami
urlpatterns = patterns('',
(r'^page/(?P<page_slug>.*)/', 'myapp.views.someview'),
)
Następnie mógłbym zrekonstruować adresy URL za pomocą poniższego, prawda?
>>> 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/'
Ale co, jeśli zmienię mój URLconf na ten?
urlpatterns = patterns('',
(r'^foo-direct/', 'myapp.views.someview', {'page_slug': 'foo'}),
(r'^my-bar-page/', 'myapp.views.someview', {'page_slug': 'bar'}),
)
I Oczekuje się, że wyniki:
>>> 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/'
Jednak ta generuje NoReverseMatch
wyjątku. Podejrzewam, że próbuję zrobić coś niemożliwego. Wszelkie sugestie na temat dokładniejszego sposobu osiągnięcia tego, czego chcę?
Nazwane adresy URL nie są opcją, ponieważ nie chcę, aby inne aplikacje, które je zawierają, musiały znać specyfikację struktury adresów URL (enkapsulacja i wszystko inne).
Co masz na myśli mówiąc "nie działa"? Komunikat o błędzie? Jeśli tak to co? –
Zgłasza wyjątek 'NoReverseMatch'. –
Zaktualizuj pytanie nowymi faktami - nie dodawaj użytecznych informacji jako komentarzy. –