设置django静态目录以进行测试/开发

时间:2014-08-28 07:27:39

标签: django

在生产中,apache服务器可以正常处理服务static文件。要在我的本地计算机上进行测试,我正在使用manage.py runserver

似乎django应用程序我以某种方式将一些默认搜索路径注入此调试服务器。浏览器网址显示/static/whatever下的所有内容,但这些文件来自各处。这对于测试来说很好,但是当我转向生产时,我会在一条路上需要它们。值得庆幸的是,manage.py collectstatic提供了一种方便的方法,可以将所有内容复制到STATIC_ROOT settings.py中给出的一个目录中。我将我的设置为os.path.join(BASE_DIR, 'static/') BASE_DIR所在的位置manage.py

现在我想开始在static中添加我自己的内容,但所有内容仍然由DEBUG=True下的应用提供的这些隐藏搜索目录托管。我在urls.py中尝试了以下内容:

from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()

import re
from django.conf import settings
if settings.DEBUG:
    static_url = re.escape(settings.STATIC_URL.lstrip('/'))
    urlpatterns += patterns('',
        (r'^%s(?P<path>.*)$' % static_url, 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    )

两者都没有效果。

我尝试在STATICFILES_DIRS中提供我的静态目录,但收到错误ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting。所以我尝试删除STATIC_ROOT,因此只在STATICFILES_DIRS中提供了路径。最后,我可以在开发中访问我的文件(仍然使用上面的staticfiles_urlpatterns)。

但是,我非常确定删除STATIC_ROOT 是正确的方法。首先,我无法在安装其他应用程序后运行collectstatic而无需再次手动更改所有内容。 我应该如何配置静态目录以进行开发?

此外,有没有办法关闭托管应用程序特定的静态目录,以便我可以确保我的单个静态设置正确(但仍处于开发模式)?

2 个答案:

答案 0 :(得分:3)

你让它变得比它需要的更复杂。对于项目级资产,在STATICFILES_DIRS中包含“静态”,但是使STATIC_ROOT - 即collectstatic命令的目的地 - 其他东西,可能是“静态文件”,并将该目录别名为Apache中的/static/。 Django将自动从STATICFILES_DIRS提供您的资产,甚至不需要添加urlpatterns。

答案 1 :(得分:3)

好的,我完全错过了这一点。

  1. STATIC_ROOT用于collectstatic为您汇集所有静态内容。 您不会将文件添加到此处,因为它会被覆盖。
  2. 现在进行制作,您可以让您的网络服务器托管目录STATIC_ROOT并将STATIC_URL指向可通过网络服务器找到的网址。
  3. STATICFILES_DIRS允许您为collectstatic添加自己的目录,以便搜索并汇总到STATIC_ROOT。然后,您可以很好地为每个应用程序和/或常见项目静态分离静态内容。
  4. 对于开发人员来说,django希望一切都在STATICFILES_DIRS并且托管那些,而不是STATIC_ROOT,因为那样会有重复。这对于较大的项目是有意义的,因为你想要处理每个应用程序文件,而不是一些网站的东西。