7

我正在计划一个新的 Django 项目,并希望一切顺利。我偶然发现了如何组织项目目录布局的问题。幸运的是,网络上有很多优秀的项目模板示例。尽管如此,我仍然难以理解一件事:

建议将模板文件放在项目根目录下的单独目录中,该目录由应用程序划分为子目录。因此,模板不位于应用程序目录中。这对我来说似乎是合乎逻辑的,因为我们想将应用程序逻辑与表示逻辑分开。但是静态文件呢?在这里,常见的做法似乎是在应用程序目录中找到静态文件,并在开发时将它们加载到项目根目录下的“静态”目录中(collectstatic)。而这个逻辑我不明白。由于静态文件(即 js、css、图像)通常是在模板中访问的,而不是在应用程序代码中,我会将它们算作表示逻辑。那么为什么它们不像模板那样存储——项目根目录下的目录,以及单个应用程序的子目录?

我知道我可以将这些文件存储在任何我想要的地方,但我想人们这样做可能有一个很好的理由。这可能是什么原因?

4

2 回答 2

9

静态文件可以放在相关的应用程序中,就像与特定应用程序相关的模板通常放在应用程序目录中一样。

有时,这是有道理的。有时,它不会 - 这是你的电话。

例如,我将我的静态媒体放在一个site_media目录中(全局 css、全局图像等),但将应用程序特定媒体放在app/static. 例如,如果我有一个Poll应用程序,很有可能我的媒体仅用于投票应用程序模板,而不是我的站点索引。

模板也是如此:我将全局模板 (base.html) 放在全局模板目录中,但特定于应用程序的模板放入myapp/templates/myapp/foo.html.

最后,它对可插拔应用程序特别有意义。例如,django 的静态文件存储在应用程序中,但可以在您的静态文件目录中访问,即使该应用程序位于您的 python 路径中的某个位置。以前,您必须将媒体目录或符号链接复制到它。

staticfiles 应用程序真的很出色,因为它可以让您将与应用程序相关的所有文件组织在一个地方:应用程序文件夹。collectstatic负责其余的工作,并将其全部用于 Web 服务器的一个位置。

于 2012-02-03T00:03:28.150 回答
5

我实际上将模板放在每个应用程序的目录中,我认为这是有道理的。你仍然有逻辑分离的分离,因为其他一切都发生在 Python 文件中。

但是,将模板目录放在应用程序中意味着如果该应用程序对其他项目有用,您可以直接将应用程序复制到新项目中。您始终可以通过在根模板文件夹中创建替代模板来覆盖这些模板。

正因如此,静态目录应该存放在app目录下;它允许您根据特定应用程序的需要非常清楚地组织资源,这就是首先创建静态文件应用程序的原因。

于 2012-02-03T14:04:10.513 回答