2012-10-23 39 views
4

我有一个托管乘客Python/Django的Dreamhost共享服务器。目前我有一个收集非python文件的全局文件夹(/ public/static,/ public/media)。当我执行“collectstatic”时,所有应用程序的* /静态文件都被复制到全局/公共/静态文件夹中。目前很好。Dreamhost上的Django静态文件

1)我越来越厌倦了使用collectstatic。我想删除我的应用的* /静态文件夹,并将他们的文件放在全局/公共/静态。由于Passenger Python将Apache的文档根目录指向/ public,因此它可以在Dreamhost上运行,它将正确地检索/ public/static和/ public/media。但在开发方面,我没有这样的功能(在python manage.py下)。

2)在Dreamhost /共享主机下的静态/缓存文件的任何优化?

下面是我的设置:

网站设置:

STATICFILES_DIRS = (
    ABS_PATH + '/???/???/static/', #My App's static dir 
) 

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 
'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
#'django.contrib.staticfiles.finders.DefaultStorageFinder' 
) 

TEMPLATE_DIRS = (
#ABS_PATH + '/hdrtoronto/hdrtoronto/templates/' 
ABS_PATH + '/templates/' 
) 

Urls.py:

if os.environ.get("django_dev", None): 
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT) 
urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT) 

回答

3

STATIC_ROOTMEDIA_ROOT需要位于Django项目之外。因此,collecstatic管理命令可以将所有静态资源配置在外部位置,就像它的意图一样。

我建议你重新考虑如何管理你的静态文件。你即将做一些非常错误的事情,我担心你完全忽略了这一点,并且违背了正确的框架行为。

+0

是的,STATIC_ROOT,MEDIA_ROOT放置在项目之外。实际上,在生产过程中它可以很好地工作(所有文件都放置在全局/静态文件中),但是对于开发(问题出现在这里)则不会。在应用程序的/ static中包含GIGS图像并将其复制到全局/静态是没有意义的。如果** collectstatic **将文件复制到全局/静态,那么我应该有能力在开发过程中不处理它。 Django实现应用程序模块化是一种完全矫枉过正的行为,尤其是当我的大多数站点都是特定于域的/耦合的时候。 – Exegesis

+3

我完全理解你可能不同意Django在Django应用程序中的架构细分,它是一个非常独特的框架功能,但这些静态资源构成了你的应用程序的一部分。 Web服务器拥有自己的首选资产位置,并具有受管制的访问权限 - 因为您通常不会授予Web服务器访问权限,也不会写入内容,例如,上传到你的源码包中的路径,因此是外部的'STATIC_ROOT','MEDIA_ROOT'和需要'collectstatic'命令。 –