Django静态文件应用程序和Wsgi

Django静态文件应用程序和Wsgi,django,mod-wsgi,vhosts,Django,Mod Wsgi,Vhosts,这个问题不像其他问题那么容易回答。。至少设置简单的基于一个目录的静态文件位置不是问题 这里有一个非常有趣的项目。。这一个是使用Distribut和buildout在一个目录中生成整个项目和django模块。您可以轻松地从开发模式迁移到生产模式等。。您只需重命名dir,并在其中键入“make”,即=)其中有手册 使用python服务器而不使用apache mod_wsgi的情况: 默认静态文件位置为:“var/htdocs/static”。这可以用一个静态目录位置覆盖,例如apps/myapp/

这个问题不像其他问题那么容易回答。。至少设置简单的基于一个目录的静态文件位置不是问题

这里有一个非常有趣的项目。。这一个是使用Distribut和buildout在一个目录中生成整个项目和django模块。您可以轻松地从开发模式迁移到生产模式等。。您只需重命名dir,并在其中键入“make”,即=)其中有手册

使用python服务器而不使用apache mod_wsgi的情况: 默认静态文件位置为:“var/htdocs/static”。这可以用一个静态目录位置覆盖,例如apps/myapp/myapp/static/。这适用于pythonwebserver,但不适用于wsgi/apache。除了默认目录之外,wsgi看不到任何内容。。示例:适用于apache,但同一url不适用。这个文件位于myproject/apps/myapp/myapp/static/css/main.css中,尽管默认的静态目录是var/htdocs/static=)

据我所知,这个覆盖是通过settings.py中的StaticFiles应用程序实现的

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'htdocs', 'static')
STATICFILES_DIRS = (
  os.path.join(BUILDOUT_DIR, 'project', 'static'), # <-- why "project" and not "apps" I don't know X_X
)
STATIC\u URL='/STATIC/'
STATIC\u ROOT=os.path.join(BUILDOUT\u DIR,'var','htdocs','STATIC')
静态文件\u目录=(

os.path.join(BUILDOUT_DIR,'project','static'),#WSGI与提供静态文件没有任何关系。Django部署文档中已经清楚地介绍了这一切——正如Torsten在评论中所建议的,您需要将Apache指向您的静态文件,可能是通过别名


但是我必须说,这个项目看起来很不可靠。手动向sys.path添加一堆鸡蛋不是正确的方法,更好的方法是使用virtualenv之类的工具,它可以为您管理所有这些内容。

在mod\u wsgi官方网站上有很多文档可以帮助您了解如何使用它。This包括如何设置它以提供静态媒体文件。请参阅:


没有办法像django对WSGI那样进行某种重写

django“manage.py collectstatic”中有一个很棒的命令,它将所有文件从STATIC_DIR列表(在settings.py中)放置到主静态目录中。事实上,这个命令只是从所有这些DIR复制文件,就是它=)


很高兴知道,当目录中的任何文件都将被更新时,我如何使此复制自动进行。。与monitor.py一样,在修改源代码时自动重新加载wsgi…

您将apache配置中的别名指向了/your/path/to/static/?中的服务器静态文件,这一个呢?这东西是怎么工作的?它可以从多个位置收集静态文件?同样,Apache(或任何其他Web服务器)只能在向Apache配置中添加指向托管静态文件的位置的别名时提供静态文件。是的,您应该使用collectstatic命令将所有静态文件收集到一个位置(为了方便或bcs。您不希望将许多别名设置到不同的位置)。staticfiles应用程序主要用于帮助您在本地开发服务器上开发,而无需执行诸如collectstatic或向服务器配置添加别名之类的操作。在生产环境中,唯一的用法是在模板中包含静态URL。有关如何在生产环境中处理媒体/静态文件的更多信息,请参阅。如何处理?这是一个管理命令,它将静态文件收集到一个地方,然后由Apache直接提供服务。这是buildout实现虚拟隔离的方式。(这个sys.path方法的优点是,您不必激活virtualenv,它的设置都是正确的,这在apache/iis内部运行时很有帮助)。
#!/usr/local/bin/python2.6

import os,sys
sys.path[0:0] = [
    '/usr/local/lib/python2.6/site-packages/',
    '/www/webapp/visimes/eggs/PIL-1.1.7-py2.6-freebsd-8.1-RELEASE-amd64.egg',
    '/www/webapp/visimes/eggs/South-0.7.3-py2.6.egg',
    '/www/webapp/visimes/eggs/django_annoying-0.7.6-py2.6.egg',
    '/www/webapp/visimes/eggs/coverage-3.4-py2.6-freebsd-8.1-RELEASE-amd64.egg',
    '/www/webapp/visimes/eggs/django_debug_toolbar-0.8.4-py2.6.egg',
    '/www/webapp/visimes/eggs/django_extensions-0.6-py2.6.egg',
    '/www/webapp/visimes/eggs/django_test_utils-0.3-py2.6.egg',
    '/www/webapp/visimes/eggs/ipdb-0.3-py2.6.egg',
    '/www/webapp/visimes/eggs/ipython-0.10.1-py2.6.egg',
    '/www/webapp/visimes/eggs/djangorecipe-0.21-py2.6.egg',
    '/www/webapp/visimes/eggs/zc.recipe.egg-1.3.2-py2.6.egg',
    '/www/webapp/visimes/eggs/zc.buildout-1.5.2-py2.6.egg',
    '/www/webapp/visimes/eggs/BeautifulSoup-3.2.0-py2.6.egg',
    '/www/webapp/visimes/eggs/setuptools-0.6c12dev_r88795-py2.6.egg',
    '/www/webapp/visimes/parts/django',
    '/www/webapp/visimes',
    '/www/webapp/visimes/project', # <-- this one need for monitor.py which i put in there
    '/www/webapp/visimes/apps/portal', # <-- startapp.sh script some how forgot to add this dir, it's my default app dir, which must be generated with startapp.sh and added in here..
    ]

import djangorecipe.wsgi

if __name__ == '__main__':
    djangorecipe.manage.main('project.development')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.development'

import monitor
monitor.start(interval=1.0)

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()