Giả sử tôi có URLconf như dưới đây và 'foo'
và 'bar'
là các giá trị hợp lệ cho page_slug
.Đảo ngược URL Django Với Tùy chọn Bổ sung
urlpatterns = patterns('',
(r'^page/(?P<page_slug>.*)/', 'myapp.views.someview'),
)
Sau đó, tôi có thể tạo lại URL bằng cách sử dụng bên dưới, phải không?
>>> 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/'
Nhưng điều gì sẽ xảy ra nếu tôi thay đổi cấu hình URL của mình?
urlpatterns = patterns('',
(r'^foo-direct/', 'myapp.views.someview', {'page_slug': 'foo'}),
(r'^my-bar-page/', 'myapp.views.someview', {'page_slug': 'bar'}),
)
tôi mong đợi kết quả này:
>>> 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/'
Tuy nhiên, điều này ném một ngoại lệ NoReverseMatch
. Tôi nghi ngờ tôi đang cố gắng làm điều gì đó không thể. Bất kỳ đề xuất nào về cách thức an toàn hơn để hoàn thành những gì tôi muốn?
URL được đặt tên không phải là một tùy chọn, vì tôi không muốn các ứng dụng khác liên kết với những ứng dụng này cần biết về chi tiết cụ thể của cấu trúc URL (đóng gói và tất cả).
Ý anh là gì bởi "không làm việc"? Thông báo lỗi? Nếu có thì sao? –
Nó ném một ngoại lệ 'NoReverseMatch'. –
Vui lòng cập nhật câu hỏi bằng các sự kiện mới - không thêm thông tin hữu ích làm nhận xét. –