2014-11-08 125 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