【问题标题】:In Django (v1.6.5), what's the best practice for location of Templates, Static files?在 Django (v1.6.5) 中,模板、静态文件位置的最佳实践是什么?
【发布时间】:2014-07-16 06:58:22
【问题描述】:

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

我理解绝对路径和相对路径就好了,但我似乎找不到任何与我的安装相同的说明。我知道这类似于其他问题,但这些答案不起作用。我观看的成功构建简单应用程序的视频没有将模板放在 Project 文件夹中,这是逻辑告诉我它们应该放在的位置。

我有 Python:
C:\Python27

Django (v1.6.5) 位于:
C:\Python27\Lib\site-packages\django

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

项目“我的网站”:
C:\Python27\Scripts\venv\mysite

和一个应用“电影”:
C:\Python27\Scripts\venv\mysite\films

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

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

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

然后使用 App 名称创建子目录?

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

  2. 对静态文件(css、图像)遵循类似的流程?

【问题讨论】:

    标签: django templates static


    【解决方案1】:

    像所有框架一样,如果你遵循一些指导原则(并放弃一些控制),django 会带来很多好处。诀窍是知道这些准则是什么。

    对于模板:

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

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

    对于静态文件:

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

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

    默认情况下,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 时,您将得到以下结果(假设 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(我知道,很有创意)。在此目录中创建所有环境。激活环境后,您可以在系统中的任何目录中工作,并且您的 shell 将针对该环境的 Python 进行配置。

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

    【讨论】:

    • 我什至无法弄清楚如何在此评论中放入回车而不会使该文本区域失去焦点并尝试保存表单!!!! 1.“所以,如果你的应用程序被称为myapp,你就会有myapp/static/myapp” 为什么必须在路径中第二次指定'myapp'? 2.关于虚拟环境目录,这个文件夹里面除了Projects什么都没有。事实上,我认为我把它们放在这里完全符合你的建议! /venv/ 目录是 django-admin.py、pip、virtualenv 的兄弟对象...你建议我以不同的方式重新安装吗?
    • 虚拟环境(Python虚拟环境),不应该是你的django应用所在的同一个目录。
    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 2011-09-08
    • 2012-08-19
    • 2010-12-16
    • 2011-09-04
    • 2012-02-25
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多