Tôi đã làm việc với Django một thời gian (hiện tại trên phiên bản 1.2), nhưng gần đây đã bắt đầu làm việc trên một ứng dụng cần hỗ trợ nhiều phiên bản. Ví dụ, hồ sơ dự án urls.py
sẽ bao gồm nó hai lần, dưới hai namespaces khác nhau, như thế này:Đảo ngược URL không gian tên trong Django: nhiều phiên bản của cùng một ứng dụng
urlpatterns = patterns('',
(r'^instance1/', include('myapp.urls', namespace='instance1')),
(r'^instance2/', include('myapp.urls', namespace='instance2')),
)
tôi đã đi cùng tốt, cho đến khi tôi nhận ra tôi cần thiết để tìm ra những việc cần làm về tất cả các cuộc gọi nội bộ để reverse()
(hoặc mẫu gọi tới bộ lọc {% url %}
). Ví dụ, giả sử tôi đang làm một cái gì đó như sau trong một trong những quan điểm của tôi:
return HttpResponseRedirect(reverse('view_name'))
hoặc một cái gì đó như thế này trong một trong các mẫu của tôi:
<a href="{% url view_name %}">link text</a>
... nơi view_name
là tên của mẫu URL có trong myapp.urls
. Vì tôi đang sử dụng không gian tên, điều này sẽ gây ra lỗi: không có chế độ xem nào được gọi là view_name
. Thay vào đó, tôi phải nói điều đó là instance1:view_name
hoặc instance2:view_name
. Nhưng làm điều này năng động là stumping tôi.
tôi đã làm một số tìm kiếm và nó trông giống như current_app
cãi nhau, truyền cho một trong hai Context
hoặc RequestContext
, được thiết kế để giúp đỡ với điều này, nhưng nó không phải là rõ ràng ở tất cả các cách để tự động vượt qua các tên ứng dụng đúng-current_app
. Vì vậy, những gì đúng cách để nói với Django mà không gian tên để sử dụng?
EDIT: Trường hợp sử dụng của tôi là sử dụng một lần cài đặt ứng dụng nhiều lần. Đó là, nó chỉ tồn tại trên đĩa một lần, nhưng được bao gồm nhiều lần trong gốc của dự án urls.py
(mỗi lần theo một không gian tên khác nhau, như trong ví dụ của tôi ở trên). Với điều này trong tâm trí, có cách nào tốt để theo dõi không gian tên một khung nhìn/mẫu được gọi là từ, và làm cho bất kỳ sử dụng reverse()
hoặc {% url %}
dính trong cùng một không gian tên? Tôi biết Django 1.3 sẽ cung cấp một số tính năng bổ sung có thể giúp với điều này (cụ thể là, new and improved resolve()
), nhưng chắc chắn có một cách hay để làm điều này ngay bây giờ ...
Câu trả lời của tôi cho http://stackoverflow.com/questions/2030225/how-to-get-current-app-for-using-with-reverse-in-multi-deployable-reusable-djang/13249060#13249060 áp dụng ở đây là tốt. – stefanfoulis