在Django(v1.6.5)中,什么是定位模板,静态文件的最佳实践?

时间:2014-07-16 06:58:23

标签: django templates static

我对模板文件和静态文件放在哪里感到非常困惑。

我理解绝对和相对路径就好了,但我似乎无法找到任何反映我所拥有的安装的指令。我知道这类似于其他问题,但这些答案都不起作用。我看到成功构建一个简单应用程序的视频没有将模板放在Project文件夹中,这是逻辑告诉我应该的。

我有Python:     
C:\ Python27

Django(v1.6.5)at:     
C:\ Python27 \ LIB \站点包\ django的

我创建了一个名为“mysite”的项目和一个名为“电影”的应用。

项目“mysite”:     
C:\ Python27 \脚本\ VENV \ mysite的

和App“电影”:     
C:\ Python27 \脚本\ VENV \ mysite的\膜

我看过的视频让我把模板放在:     C:\ Python27 \ LIB \站点包\ django的\的contrib \管理员\模板

但这似乎完全是愚蠢的,因为模板不在Project和App中。

  1. 我不应该在Project文件夹中放置模板文件夹: C:\ Python27 \脚本\ VENV \ mysite的\模板
  2. 然后使用App名称创建子目录?

    1. 我需要编辑哪些文件(以及如何)告诉Django在哪里找到它们?

    2. 对静态文件(css,图像)执行类似的处理?

1 个答案:

答案 0 :(得分:2)

与所有框架一样,如果你遵循一些指导方针(并放弃一些控制),django会带来很大的好处。诀窍是要了解这些指南是什么。

对于模板:

  1. 如果模板未绑定到特定应用程序,请将其放在项目根目录的templates目录中。将此目录的完整路径添加到TEMPLATE_DIRS

  2. 所有其他模板应该放在应用程序目录中名为templates的目录中。因此,如果您的应用程序被称为myappmyapp的模板将进入myapp/templates/

  3. 对于静态文件:

    1. 对于与特定应用程序相关的文件,在应用程序目录中创建一个名为static的目录,然后在其中包含一个带有应用程序名称的目录。因此,如果您的应用程序被调用myapp,那么您将拥有myapp/static/myapp。将此应用程序的所有静态内容放在此处;例如myapp/static/myapp/js/funky.js

    2. 对于通用的静态文件,在项目的根目录中创建名为assets(或static)的目录。将此目录的完整路径添加到STATICFILES_DIRS

    3. 默认情况下,django将搜索INSTALLED_APPS中列出的所有应用程序,并将任何templatesstatic目录添加到其搜索路径中以查找文件。默认情况下,这是管理员无需配置任何内容的方式。

      如果您选择将模板和静态文件放在其他位置,则只需要修改TEMPLATE_DIRSSTATICFILES_DIRS设置。如果您的所有模板和静态资产都与应用程序绑定在一起,那么只需创建上述目录就可以使一切正常运行。

      如果您想知道为什么需要在myapp/static/下创建另一个目录来存储静态文件,这更适合于移植性。 collectstatic command是一个简单的“复制和替换”实用程序。它将覆盖STATIC_DIR位置中的所有文件。这意味着如果两个应用程序具有一些具有相同名称的静态文件,则将覆盖它们而不会发出警告。添加子目录可以防止应用程序的静态资产被覆盖,因为将创建确切的路径。

      假设您有两个应用程序app1app2,并且两个应用程序在其受尊重的目录中都有一个名为style.css的文件:

      • app1/static/css/style.css
      • app2/static/css/style.css

      当您运行collectstatic时,您最终会得到以下信息(假设staticSTATIC_DIR设置的名称):

      • static/css/style.css

      这可能是来自app1或app2的style.css,另一个无法确定(实际上是基于INSTALLED_APPS顺序)。为了防止这种情况,如果你有:

      • app1/static/app1/css/style.css
      • app2/static/app2/css/style.css

      现在,你最终得到:

      • static/app1/css/style.css
      • static/app2/css/style.css

      两个文件都将被保留。

      您也不应将代码放在虚拟环境目录中。虚拟环境不是源代码的一部分,将项目放在同一目录中可能会导致以后出现问题。

      为您的环境创建一个目录 - 我称之为我的envs(创意,我知道)。在此目录中创建所有环境。激活环境后,您可以在系统中的任何目录中工作,并且将为该环境的Python配置shell。

      最后,为了获得最佳,准确,最新的信息,请始终参考django手册和教程。几乎所有其他资源(甚至通常建议的djangobook.com)都已过时。

相关问题