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 被移动到名称与项目名称相同的子目录中。由于 static、media 和 templates 目录现在必须移动到同一个子目录中?
这是我必须做的,还是只是更改 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/tests
、myproject/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
目录,以及名为 css
、js
和 media
的后续子目录,用于全局静态文件。
我猜没有什么异国情调。我认为大多数人都遵循类似的模式,但如果有的话,我想在这里指出任何效率低下的地方。
编辑: 关于我使用的生产 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