Django 1.4(MEDIA_ROOT、STATIC_ROOT、TEMPLATE_DIRS)

Posted

技术标签:

【中文标题】Django 1.4(MEDIA_ROOT、STATIC_ROOT、TEMPLATE_DIRS)【英文标题】:Django 1.4 (MEDIA_ROOT, STATIC_ROOT, TEMPLATE_DIRS) 【发布时间】:2012-06-03 16:10:48 【问题描述】:

我在 settings.py

中有一个带有此选项的 Django 1.3 项目

SITE_ROOT = os.path.dirname(os.path.realpath(__文件__))

STATIC_ROOT = os.path.join(SITE_ROOT, 'static')

MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')

TEMPLATE_DIRS = ( os.path.join(SITE_ROOT, 'templates'), )

但在 Django 1.4 中,默认情况下 settings.py 被移动到名称与项目名称相同的子目录中。由于 staticmediatemplates 目录现在必须移动到同一个子目录中?

这是我必须做的,还是只是更改 STATIC_ROOT、MEDIA_ROOT 和 TEMPLATE_DIRS 选项?

我知道这两种变体都可以,但是 Django 1.4 中的最佳实践是什么?

而且我知道每个应用程序都可以拥有自己的模板和静态目录。

将所有其他应用程序目录放在同一个子目录中会更好吗?这不是使用 manage.py startapp 默认发生的情况

【问题讨论】:

见docs.djangoproject.com/en/1.4/ref/django-admin/…和docs.djangoproject.com/en/1.4/releases/1.4/… 我看到了这个,但不认为它回答了我的问题。他们只是说两种方式都可以使用 哦,好的。那么最好将所有相关的操作代码放在myproject/myproject下,然后有myproject/testsmyproject/docs等。至于静态/媒体,这取决于,我通常想要我的应用程序自治/可插拔,所以我的每个应用程序都有自己的“静态”文件夹。 404.html 呢?把这个模板文件放在哪里?那么作为整个项目的一个媒体目录呢? 对于这两种情况,我的项目中几乎总是有一个website 应用程序,而models.py 是空的。该应用程序包含一个 index 视图(在其views.py 内),因为有时很难判断哪个应用程序应该具有 index('/') 视图!此应用程序还有一个 templates 文件夹,其中包含 404/500 个页面。我的项目的通用媒体文件也是如此。 【参考方案1】:

好的,我遵循的方案是这样的:

myproject/requirements.txt - pip 可安装包

myproject/deployment - 部署内容,如服务器配置文件、固定装置(虚拟数据)等。

myproject/docs - 项目文档

myproject/tests - 项目的测试

myproject/myproject - 项目的操作代码(和settings.py,urls.py)

扩展中 myproject/myproject 文件夹:

myproject/myproject/app1 - 常规应用(包含其特定模板/静态文件)

myproject/myproject/app2 - 另一个常规应用(同上)

myproject/myproject/website - 按照惯例,半特殊应用程序。

这个website 应用程序基本上包含 4 个东西:

1) 一个空的models.py(以便 django 将其视为有效应用)

2) 带有入口点 index 视图的 views.py。也许其他一些视图不适合任何其他特定应用程序。

3) 带有自定义django commands 的management 目录,适用于整个项目。

4) 具有 404.html 和 505.html 的 templates 目录。它还有一个名为website 的子目录,其中包括所有其他应用程序extends 的通用/基本html 模板,以及 index.html

5) 一个 static 目录,以及名为 cssjsmedia 的后续子目录,用于全局静态文件。

我猜没有什么异国情调。我认为大多数人都遵循类似的模式,但如果有的话,我想在这里指出任何效率低下的地方。

编辑: 关于我使用的生产 VS 开发的设置 流行的 settings_local 模式,你可以阅读 here 并最终会 引导你here,描述了一个更好的模式。

【讨论】:

对于本地/开发/测试/QA/UAT/生产环境的不同设置,使用此设置您会做什么?您是否考虑过在部署目录下放置单独的设置? @Jordan 我做了大多数人直到最近才做的事情。我有一个与 settings.py 处于同一级别的 settings_local.py。然后 settings.py 执行try: from settings_local import * except:pass。我的 VCS 当然会忽略 settings_local.py 。我认为尽管现在有替代和更好的解决方案。它本身就是一个完整的主题。 我也和rantanplan一样

以上是关于Django 1.4(MEDIA_ROOT、STATIC_ROOT、TEMPLATE_DIRS)的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 开发期间提供静态媒体:为啥不 MEDIA_ROOT?

Django - MEDIA_ROOT 和 MEDIA_URL

django media_root 不工作

Django MEDIA_URL 和 MEDIA_ROOT

在 django settings.py 中更新 media_root 时遇到问题

Django MEDIA_URL 附加完整的 MEDIA_ROOT