2014-11-08 126 views
1

我是Django的新手,並試圖理解構建我的項目的「正確」方法,特別是何時以及如何在應用程序中放置單獨的功能。Django項目結構,

我正在建設的網站主要包括靜態信息(這是一個假日小屋),我提供的主要網站項目的意見。我還想包含一個日曆,它將顯示在一個側欄中的可用性,我已經開始將它作爲應用程序「availabilityCalender」構建,因爲它將在大多數頁面中重用,並且我可以看到我在其他項目中使用它。

我無法弄清楚的是如何從我的應用程序中將其掛接到頁面視圖中。大多數教程在線應用程序代表整個頁面,並鏈接到項目的urls.py視圖中。相反,我想添加應用程序作爲我的頁面的一部分。代表什麼,我試圖做的最簡單的方法是如下:

from django.shortcuts import render 
from django.http import HttpResponse 
import availabilityCalender 


def index(request): 
    availabilityCalender.views.monthView() 

我希望這會簡單地將應用程序的視圖到索引視圖。在測試這個時,我得到錯誤「errorAttributeError at /,'module'object has no attribute'views'」。

我試圖使用應用程序是不是爲了設計或者只是使用錯誤的方法?我很抱歉幾乎肯定是一個令人難以置信的簡單問題!

  • 編輯 -

我得到了上面的代碼改變我的導入工作:

from availabilityCalender.views import monthView 


def index(request): 
    return monthView(request) 

回答

1

一種方式做,這是使用模板繼承。每個模板都可以擴展包含日曆的基本模板。

另一種方法是將您的日曆放在自己的模板中並使用{% include %}模板標記。

如果您的日曆中有與之相關的數據,則下一個問題會將該數據獲取到模板中。如果您在網站的每個頁面上都包含日曆,則可以創建自定義上下文處理器,該處理器會自動將日曆數據添加到每個請求。

如果日曆僅在某些頁面上,您可以在視圖基礎上加載數據。也許你可以將日曆功能提取到一個CalendarMixin視圖中,該視圖加載get_context_data中正確的日曆數據。

+0

感謝。我剛剛閱讀了一些關於自定義上下文處理器的內容,他們似乎可以完成這項工作,從本質上取代了我爲日曆編寫的視圖,以提供我需要的數據。我假設我正在嘗試使用的方法,即在彼此內部運行視圖不是真的支持? – n0rman0 2014-11-08 15:06:03

0

首先你的項目應該有類似這樣的結構:

-/myProject 
 
    -/myproject 
 
    -settinngs.py 
 
    -views.py 
 
    -urls.py 
 
    -/templates 
 
    -mange.py 
 
    -/availabilityCalender 
 
    -models.py 
 
    -views.py

現在,你需要確保你添加到您的設置INSTALLED_APPS應用「myproject.availabilityCalender」完成此操作後,在所有項目和其他應用程序中使用和重用您的應用程序非常簡單。在這種特殊情況下,如果你想導入並使用您的應用程序上的myproject/views.py,只是做:

from myproject.availabilityCalender.models import <--MODULES YOU NEED FOR YOUR VIEW--> 
 

 
def monthView(request): 
 
. 
 
. 
 
. 
 
    return render(request, 'index.html')

+0

所以這個方法是在應用程序中定義模型,但是項目中的視圖和模板?目前我已經在我正在導入的日曆應用程序中定義了一個子視圖和模板,這是否也有效? – n0rman0 2014-11-08 15:32:19

+0

我相信以前的回答比我的目的更準確。我想說的是,你可以將你的APP模塊導入到你想要在項目內部的任何位置渲染你的信息的view.py。但在你的情況下,最好的辦法是定義你的APP availabilityCalender中的URL,視圖,模塊和模板,而不是定義包含你的APP URL的主項目的URL。就像這樣,在其他項目中運行應用程序要容易得多,因爲您唯一需要做的就是將APP包含在項目settings.py和url中。 – 2014-11-08 15:50:39