繁体   English   中英

Django StaticFiles APP和Wsgi

[英]Django StaticFiles APP and Wsgi

这个问题并不像其他人那么容易..至少。 设置简单的基于一个dir的静态文件位置不是问题。

https://bitbucket.org/sirex/django-starter/src

这里有一个非常有趣的项目..这个项目使用分发和构建来制作整个项目,并在一个目录中使用django模块。 您可以轻松地从开发模式迁移到生产模式等等。您只需重命名目录,并在其中输入“make”,那就是它=)那里有手册......

适用于python服务器的情况,不适用于apache mod_wsgi:默认静态文件位置为:“var / htdocs / static”。 这可以用一个静态目录位置覆盖,例如apps / myapp / myapp / static /。 这适用于python webserver,但不适用于wsgi / apache。 wsgi在默认目录下看不到任何东西..例如: http:// localhost:8000 / static / css / main.css可以工作,但是用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
)

也许这个是不正确的,我不知道但是使用py-server这是有效的。 apache vhost使用默认位置..并设置为“var / htdocs / static”。

也许问题出现在wsgi脚本中?

#!/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()

我自己添加了最后4行。 因为我无法启动apache ..我猜djangorecipe.wsgi应该使用staticFile覆盖来处理其他所有内容..无论如何,请查看该包,如果您使用的是linux或Mac,请自行尝试。 它必须工作

PS。 (btw bin / django需要作为bin / django.wsgi和etc / apache.conf进行公开生成vhost for apache)

如果有人试图用wsgi手动启动这个“Starter”,我真的很感兴趣...然后你就会明白一切。=)

编辑:有关WSGI如何理解他需要从django设置中搜索静态文件的默认位置的任何信息,真的很感激=)

有关如何使用它的官方mod_wsgi网站上有很多文档。 这包括如何设置它以提供静态媒体文件。 看到:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide http://code.google.com/p/modwsgi/wiki/ ConfigurationGuidelines

WSGI与提供静态文件无关 Django部署文档中清楚地说明了这一点 - 正如Torsten在评论中建议的那样,您需要将Apache指向静态文件,可能是通过别名。

我必须说,这个项目看起来非常狡猾。 手动向sys.path添加sys.path鸡蛋不是正确的方法 - 更好的方法是使用像virtualenv这样的东西来管理所有这些。

没有办法像django那样覆盖WSGI。

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

很高兴知道,当该目录中的任何文件被更新时,我怎么能自动进行这种复制..同样的事情就像monitor.py一样,当源被修改时自动wsgi重新加载...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM