Django 1.4 (MEDIA_ROOT、STATIC_ROOT、TEMPLATE_DIRS) 在 Django 1.4 中,有三个重要的设置需要配置:MEDIA_ROOT、STATIC_ROOT 和 TEMPLATE_DIRS。

5

我有一个使用Django 1.3的项目,其中在settings.py文件中设置了以下选项:

SITE_ROOT = os.path.dirname(os.path.realpath(__file__))

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默认发生的事情。


请参阅 https://docs.djangoproject.com/en/1.4/ref/django-admin/#startapp-appname-destination 和 https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py。 - rantanplan
我看到了这个,但不认为它回答了我的问题。他们只是说可以用两种方式使用。 - Julian Popov
1
哦,好的。最好将所有相关的操作代码放在myproject/myproject下,然后有myproject/testsmyproject/docs等。至于静态/媒体文件,则取决于情况,我通常希望我的应用程序是自主/可插拔的,因此我的每个应用程序都有自己的“静态”文件夹。 - rantanplan
404.html怎么办?在哪里放置这个模板文件?媒体目录呢,整个项目只有一个? - Julian Popov
1
对于这两种情况,我几乎总是在项目中拥有一个包含空的models.pywebsite应用程序。该应用程序内部有一个index视图(位于其views.py内部),因为有时很难确定哪个应用程序应该具有索引('/')视图!此外,该应用程序还有一个templates文件夹,其中包含404/500页面。我的项目的通用媒体文件也是如此。 - rantanplan
非常有趣的解决方案,你能把它写成答案吗?这样我就可以投票并最终接受它作为更准确的答案了。 - Julian Popov
1个回答

7

我遵循的方案如下:

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 应用程序基本上有四个部分:

1) 一个空的 models.py(这样 django 就会将它视为有效的应用程序)

2) 一个带有入口点 index 视图的 views.py。也可能包括其他不适用于任何其他特定应用程序的视图。

3) 一个具有自定义 django 命令management 目录,这些命令适用于整个项目。

4) 一个包含 404.html 和 505.html 以及名为 website 的子目录的 templates 目录,其中包括每个其他应用程序都会 extends 的通用/基础 HTML 模板,以及 index.html

5) 一个具有相应的子目录(称为 cssjsmedia)的 static 目录,用于存放全局静态文件。

我想这没什么特别的。我认为大多数人都会遵循类似的模式,但如果有任何不足之处,请告诉我。

编辑:关于生产和开发的设置,我使用普遍的 settings_local 模式,您可以在此处了解该模式,并最终跳转到此处,该页面描述了更好的模式。


你会如何为本地/开发/测试/QA/UAT/生产等不同环境设置不同的配置?您是否考虑在部署目录下放置单独的设置文件? - Jordan
@Jordan 我做的和大多数人最近一直在做的一样。我在与settings.py同级别的位置上有一个settings_local.py文件。然后,settings.py执行try: from settings_local import * except:pass。当然,settings_local.py被我的版本控制系统忽略了。不过,我认为现在有更好的替代方案。这是一个独立的主题。 - rantanplan
我也和rantanplan一样这么做。 - Julian Popov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接