在生产中,apache服务器可以很好地处理服务static文件。为了在本地机器上进行测试,我使用了manage.py runserver。
我的django应用程序似乎以某种方式向这个调试服务器中注入了一些默认的搜索路径。浏览器url显示/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。如何配置用于开发的静态目录?
另外,是否有一种方法可以关闭托管特定应用程序的静态目录,以便确保我的单个静态目录设置正确(但仍然处于开发模式中)?
发布于 2014-08-28 08:32:44
你让这件事变得更复杂了。在STATICFILES_DIRS中为项目级资产包括“静态”,但使STATIC_ROOT --即collectstatic命令的目标--可能是“静态文件”,并将该目录别名为Apache中的/static/。Django将自动从STATICFILES_DIRS中为您的资产提供服务,甚至不需要添加the模式。
发布于 2014-09-06 05:40:14
好吧,我完全没抓住重点。
STATIC_ROOT是collectstatic用来为您汇集所有静态内容的。--您没有将您的文件添加到这里,是因为它会被覆盖。STATIC_ROOT,并将STATIC_URL指向url,可以通过get服务器找到它。STATICFILES_DIRS允许您为collectstatic添加自己的目录以进行搜索,并将池添加到STATIC_ROOT中。然后,您可以很好地分离每个应用程序和/或公共项目静态的静态内容。STATICFILES_DIRS中,并托管它,而不是STATIC_ROOT,因为这样就会有重复的。这对于更大的项目来说是有意义的,因为你想要处理每个应用程序的文件,而不是网站上的一些东西。https://stackoverflow.com/questions/25543080
复制相似问题