我有一個Web應用程序,它會返回基於URL的第一部分的用戶ID,很像Twitter的:獲得來自URL段用戶使用Django
http://www.myapplication.com/user-name-goes-here/
它可以走得更深太像所以:
http://www.myapplication.com/user-name-goes-here/news/article_1/
爲了打破該網站了,我使用下面的URL路由技術:
(r'^(?P<slug>\w+)/', include('myapp.sites.urls')),
這將再往路由用戶到正確的頁面,但因爲它代表我有查詢數據庫中每個視圖,以獲得基於第一URL段USER_ID。我希望以某種方式自動執行此所以我不必每次臃腫我的看法有相同的代碼...我的解決方案是創建一些中間件,它檢查URL段和返回404如果未找到:
from django.http import Http404
class DomainMiddleware(object):
def process_request(self, request):
from myapp.sites.models import Sites
dname = request.path.split('/')[1]
if not dname:
return
try:
d = Sites.objects.get(domain__exact=dname)
except Sites.DoesNotExist:
raise Http404
return
這工作,但它試圖解析每一個要求,甚至那些圖片,網站圖標等
我的問題是這樣;有沒有辦法在每次加載頁面時運行這個查詢,而不會用額外的代碼堵塞我的視圖?如果中間件是解決方案,我該如何修改我的代碼,以便它不包括每個請求,只有成功路由URL的代碼才能包含這些請求。
希望有人能幫助!在生產反正肯定不是,在那裏你必須運行來處理不同的Web服務器,所以這不應該是一個問題,還有 -
非常感謝您的回覆,真的很有幫助。我肯定會緩存查詢,但顯然我需要確保它至少運行一次,特別是如果您進一步進入用戶頁面(這就是爲什麼我需要它在每個視圖上運行)。乾杯! – Hanpan 2010-07-26 11:26:10