有什么阻止你使用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的默认设置不会这样做。
- 通常,我想创建一个主应用程序,因此我会创建一个通常称为
网站
的应用程序。但是,在以后的某个日期,我可能希望开发专门针对此站点的原始功能。考虑到将其移除(无论是否如此),我倾向于随后创建一个单独的目录。这也意味着我可以通过取消链接配置文件中的该软件包并删除文件夹来放弃该功能,而不是从全局urls.py文件中删除正确的URL。
- 即使我想要使某些东西独立,很常见的问题是,当我看护它/使它独立时,它需要一个地方居住。基本上是上述情况,但适用于我打算普遍使用的东西。
- 我的顶级文件夹经常包含一些其他东西,包括但不限于wsgi脚本、sql脚本等。
- Django的管理扩展依赖于子目录。因此,适当命名包是有意义的。
简而言之,存在这种约定的原因与其他约定相同——它有助于他人处理您的项目。如果我看到
fields.py
,我立即期望其中的代码是django字段的子类,而如果我看到
inputtypes.py
,我可能不太清楚它的含义,除非我查看它。