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



我非常困惑于将模板文件和静态文件放在哪里。

我完全理解绝对路径和相对路径,但我似乎找不到任何与我的安装相匹配的说明。我知道这类似于其他问题,但这些答案并不奏效。我观看的成功构建一个简单应用程序的视频没有将模板放在Project文件夹中,这是逻辑告诉我它们应该在的地方

我的Python位于:
C: \ Python27

Django(v1.6.5(,网址:
C: \ Python27\Lib\站点包\django

我创建了一个项目"mysite"和一个名为"films"的应用程序。

项目"mysite":
C: \Python27\Scripts\venv\mysite

和应用程序"电影":
C: \Python27\Scripts\venv\mysite\films

我看的视频让我把模板放在:C: \Python27\Lib\site-packages\django\contrib\admin\templates

但这似乎完全是愚蠢的,因为模板在项目和应用程序之外。

  1. 我不应该在Project文件夹中放一个模板文件夹吗:C: \Python27\Scripts\venv\mysite\templates

然后使用应用程序名称创建子目录?

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

  2. 对静态文件(css,images(执行类似的过程?

与所有框架一样,如果您遵循一些准则(并放弃一些控制(,django将提供巨大的好处。诀窍是要知道这些准则是什么。

对于模板:

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

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

对于静态文件:

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

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

默认情况下,django将搜索INSTALLED_APPS中列出的所有应用程序,并将任何templatesstatic目录添加到其文件搜索路径中。默认情况下,管理员就是这样工作的,而无需配置任何内容。

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

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

假设您有两个应用程序,app1app2,并且它们各自对应的目录中都有一个名为style.css的文件:

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

当您运行collectstatic时,您将得到以下结果(假设static是您的STATIC_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(都已经过时了。

最新更新