2010-01-04 68 views
2

我試圖去耦合兩個應用程序:解耦Django的應用2 - 如何從蛞蝓獲得對象信息的URL

  1. 位置 - 包含應用程序的詳細信息的一些位置(鎮,國家,地方等)
  2. 目錄 - 包含感興趣的地方(商店,火車站,酒吧等)細節的應用程序 - 所有分類。

兩個locations.Locationdirectory.Item包含緯度/經度COORDS,我可以找到一個特定的緯度/經度座標的一定距離內的項目。

我想使用下列網址結構:

/locations/<location_slug>/directory/<category_slug>/

但我不想讓我的位置,我的應用程序目錄的應用程序依賴。

如何翻譯這個URL中使用這樣的觀點在我的目錄中的應用程序?

items_near(lat, lng, distance, category): 

一個解決將是地方創建一個新的觀點,即轉換 - 但我應該在哪裏放呢?如果它進入目錄應用程序,那麼我已將它與我的位置應用程序結合在一起,反之亦然。

將這個解決方法代碼放在我的項目URL文件中是一個好主意嗎?因此保持清除這兩個應用程序?這樣做的任何問題?

回答

2

爲了您URLPATTERN工作,調用視圖功能必須知道這兩個地點和目錄。簡短的答案是你可以把這個視圖功能放在你想要的任何地方 - 它只是一個python函數。但是,在目錄或位置應用程序之外,可能存在一些合理的位置,這是合理的。

首先,我不會把這種觀點的代碼在你的頂級urls.py,因爲該文件是爲URL配置相關的代碼。

的在那裏把你的觀點有幾個選項:

  1. 在生活的任何特定的應用程序之外的文件創建一個新的視圖功能。 <project_root>/views.py是一種可能性。這個視圖調用Directory應用程序的item_near(..)視圖沒有任何問題。

  2. 創建一個新的應用程序,把代碼在那裏,在<my_new_app>/views.py。沒有要求Django應用程序需要有models.py,urls.py等。只要確保包含__init__.py,如果你想讓Django正確地加載應用程序(例如,如果你想讓Django自動查找模板標籤或應用特定模板)。

就個人而言,我會選擇1只,如果該項目是比較簡單的去了​​,<project_root>/views.py是不是在一個享有一切變得混亂的危險。否則,我會選擇2,特別是如果您預計有其他代碼需要知道位置和目錄。使用選項2,您也可以在自己的應用專用的urls.py中收集相關的urlpatterns。

+0

@zlovelady我不知道可能有一個url reverse()問題......我從來沒有機會使用這個功能,所以我從來沒有見過這個陷阱 – JudoWill 2010-01-05 03:14:55

+0

@JudoWill我編輯出了在你的評論提到它之後「反向」陷阱,並進一步調查並意識到我錯了。我正在考慮一個與URLconf和reverse(..)不同的問題,這個問題與在widget的Media定義中使用reverse(..)有關。感謝提起它:) – zlovelady 2010-01-05 03:32:58

+0

歡呼聲 - 這似乎是將位置slu converting轉換爲lng和lat的最合理的方式。這個地方應該放在我的整個項目「應用程序」中 - 將它整合在一起的位... – 2010-01-05 17:48:31

0

從Django文檔here如果你使用Django> = 1.1,那麼你可以通過任何捕捉信息到包含的應用。因此分裂了幾個文件:

# in locations.urls.py 

urlpatterns = ('', 
    (r'location/(?P<location_slug>.*?)/', include('directory.urls')), 
    #other stuff 
) 


# in directory.urls.py 

urlpatterns = ('', 
    (r'directory/(?P<directory_slug>.*?)/', 'directory.views.someview'), 
    #other stuff 
) 

# in directory.views.py 

def someview(request, location_slug = None, directory_slug = None): 
#do stuff 

希望有所幫助。如果你在django < 1.1我不知道。

0

無論您製作應用有多少「可重複使用」,都不可避免地需要特定於站點的代碼。

我認爲創建一個「特定站點」應用程序是合乎邏輯的,該應用程序使用可重複使用和解耦應用程序的視圖。