是什么阻止你使用myproduct.myproduct
?您需要实现的目标大致包括执行以下操作:
django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py
等等。如果我说views.py
不必打电话会有帮助views.py
吗?如果您可以在 python 路径上命名一个函数(通常是 package.package.views.function_name),它将被处理。就那么简单。所有这些“项目”/“应用程序”的东西都只是 python 包。
现在,你应该怎么做?或者更确切地说,我该怎么做?好吧,如果您创建了一个重要的可重用功能,例如标记编辑器,那么您就可以创建一个“顶级应用程序”,其中可能包含widgets.py
,fields.py
等context_processors.py
- 您可能想要导入的所有内容。
类似地,如果您可以以一种在安装中非常通用的格式创建类似于博客的东西,您可以将其包装在一个应用程序中,使用它自己的模板、静态内容文件夹等,并配置一个 django 项目的实例以使用它应用程序的内容。
没有硬性规定必须这样做,但这是框架的目标之一。事实上,包括模板在内的所有内容都允许您从一些公共基础中包含在内,这意味着您的博客应该紧贴任何其他设置,只需照顾好它自己的部分。
但是,为了解决您的实际问题,是的,没有什么说您不能使用顶级项目文件夹。这就是应用程序所做的事情,如果您真的愿意,您可以这样做。然而,我倾向于不这样做,原因如下:
- Django 的默认设置不这样做。
- 通常,我想创建一个主应用程序,所以我创建了一个,通常称为
website
. 但是,以后我可能想为这个站点开发原始功能。为了使其可移动(无论我是否曾经这样做),我倾向于创建一个单独的目录。这也意味着我可以通过从配置中取消链接该包并删除文件夹来删除所述功能,而不是从全局 urls.py 文件夹中复杂地删除正确的 url。
- 很多时候,即使我想让某些东西独立,它也需要在我照顾它/让它独立的时候住在某个地方。基本上是上述情况,但对于我确实打算通用的东西。
- 我的顶级文件夹通常包含一些其他内容,包括但不限于 wsgi 脚本、sql 脚本等。
- django 的管理扩展依赖于子目录。所以适当地命名包是有意义的。
简而言之,存在约定的原因与任何其他约定相同——当涉及到与您的项目一起工作的其他人时,它会有所帮助。如果我看到fields.py
我会立即期望其中的代码继承 django 的字段,而如果我看到inputtypes.py
我可能不看它就不太清楚这意味着什么。