2012-07-15 109 views
12

我正在學習Django框架,閱讀文檔,但沒有找到有關如何在同一個項目上創建多個應用程序的參考,其中每個應用程序都有多個應用程序。例如,應用程序博客,包含應用程序用戶,評論,帖子,...,應用程序的實現和任務客戶端,用戶,附件...我應該怎麼做?django多個應用程序

localhost 
localhost/blog/ (posts, user, comment, ...) 
localhost/tasks/ (task, user, attachment, ...) 

<my project> 
-- manage.py 
-- <project name> 
-- -- blog 
-- -- -- posts 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py 
... 
-- -- tasks 
-- -- -- attachments 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py 
... 

回答

12

每個應用都會有這些方面的文件夾中:

  • views.py
  • models.py
  • 其他自選(admin.py ...)

所以,你必須:

Project 
-- manage.py 
-- Project 
-- -- views.py 
-- -- models.py 
-- -- others 
-- -- APP1 
-- -- -- views.py 
-- -- -- models.py 
-- -- -- others 
-- -- APP2 
-- -- -- views.py 
-- -- -- models.py 
-- -- -- others 
-- -- APPX 
-- -- -- views.py 
-- -- -- models.py 
-- -- -- others 

該實用程序的區別功能(如果您有Notification應用程序和通知模型,則調用Notification.models.notification)。

模型是對象的體系結構。所以你會調用例如User.username或Task.name。 Django在數據庫表中創建automaticaly。

的Django的另一種工具:您可以使用管理視圖(至極可以編輯,創建,編輯,使用您的模型對象)或更改此界面(看起來that page

如果你願意,你可以使一個識別系統,並創建表單,你可以使用你自己的管理系統。

你的榜樣:

<my project> 
-- manage.py 
-- <project name> 
-- -- urls.py 
-- -- models.py <--- User model exists in Django and here you can add informations to the defaut model it is in this file because I suppose it will be used in all your project. 
-- -- views.py 

-- -- blog <--- It's an app. 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py <--- Posts, Comments are models for the blog, so you explain them here. 

-- -- tasks <--- Another app. 
-- -- -- attachments 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py <--- Task model for exemple 
+0

它幫了我很多,謝謝 – 2012-07-16 03:57:06

+0

祝你好運!兩週前我在你的情況下,現在我認爲django在一個令人難以置信的語言! – nlassaux 2012-07-16 07:25:52

+0

我開始研究它在家庭自動化與ZigBee網絡大學的一個項目 – 2012-07-16 17:04:48

2

您對應用程序的內容感到困惑。應用程序只是一個相關功能的集合,通常(但不一定)包括模型,視圖和模板。

「用戶」不是應用程序 - 它是一個模型,但通常會使用內置的django.contrib.auth應用程序來提供用戶功能。任何應用都可以使用任何其他應用的代碼,包括模型。你可以在一個應用程序中擁有儘可能多的模型。

+0

如果我需要讓我的網站有一個管理界面,而無需使用contrib.admin什麼。如何區分邏輯? 「這個視圖是管理界面,這是公共界面」? – 2012-07-15 03:17:26

+0

如果你想。或者將其分成兩個視圖文件 - 視圖只是Python函數,它們可以在任何地方生存。或者爲所有其他應用程序中的所有管理功能分別安裝一個應用程序。隨你便。 – 2012-07-15 03:39:11

9

事情你應該瞭解有關Django的:

  1. URL映射具有文件系統或應用程序代碼上沒有任何影響。這意味着您的網址與您的代碼沒有一對一的關係。你可以有多個URL指向同一段代碼(指向相同的視圖)。這與PHP不同,例如,URL映射到文件系統。

  2. 應用程序不是「小部件」或「portlet」。應用程序只是一個python模塊,其中包含一些文件(views.py,models.py__init__.py);並且您可以擁有任意數量的應用程序。您也可以讓應用程序無法通過URL訪問 - 他們只是在那裏支持其他應用程序;並且您的應用程序不必具有與URL相同的名稱。

所以牢記這一點...你可以創建一個應用程序,調用它www,其views.py內,定義這些非常創造性地命名方法:

def blog(request): 
    pass 

def tasks(request): 
    pass 

現在您的urls.py,你可以有:

url(r'^blog/$','www.views.blog',name='blog-index'), 
url(r'^blog/posts/$','www.views.blog',name='blog-posts',kwargs={'view_posts': True}), 
url(r'^tasks/$','www.views.tasks',name='task-index'), 
url(r'^tasks/attachments/$','www.views.tasks',name='task-attachments'), 
+0

將Django與PHP比較是不合適的。 Django是python上的一個框架。 PHP可以與python或Jinja模板語言進行比較,但不能與Django進行比較。 – Mikhail 2013-10-25 03:12:13

相關問題