【问题标题】:Locations of templates and static files in DjangoDjango中模板和静态文件的位置
【发布时间】:2012-02-25 16:05:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: django static-files convention


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我发现在应用目录中组织模板和静态文件对于可插拔应用来说是有意义的。但是,如果我不打算创建可插拔应用程序就没有任何好处,不是吗?每次部署项目的新版本时,我只需调用collectstatic 就会产生开销。
    • @J0ker,这是值得商榷的,完全是你的决定。有时,如果它是一个独立打包的应用程序,我会发现自己使用app/static。其他时候,对于与核心网站相关的一组应用程序,我只使用我的site_media 文件夹。调用“collectstatic”的开销对我来说已经消除了,因为我使用了一个无论如何都使用它的结构脚本。另外
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2013-06-18
      • 2014-12-10
      • 2014-05-20
      • 2011-12-18
      • 2017-05-06
      • 2013-01-23
      • 2012-02-28
      • 1970-01-01
      相关资源
      最近更新 更多