在非根目录下使用Twisted和Django提供静态文件
我正在把一个应用程序(Sage)从Twisted迁移到Django。
现在,静态文档是通过/doc/static
来提供的,而实时生成的文档则通过/doc/live
来提供。
请问,是否可以只用Twisted来提供/doc/static
,而让Django来处理其余的/doc/*
呢?
3 个回答
如果我没有理解错这个问题,为什么不在请求到达Django之前,就把/doc/static这个网址重写成Twisted呢?也就是说,可以在Apache或者代理服务器的层面上处理这个问题。
看看这个链接,里面讲了如何在Twisted上运行Django:(以下步骤来自博客)
- 使用easy_install安装Twisted
- 使用easy_install安装Django
- 然后就可以开始了!
- 用命令django-admin.py startproject foo创建一个新的项目
创建一个名为myapp.py的文件,里面写入以下代码:
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
设置环境变量,输入:export DJANGO_SETTINGS_MODULE=foo.settings
- 运行命令twistd -no web --wsgi=myapp.application
在评论区还有一个例子,讲了如何用Twisted直接处理媒体文件,然后再把请求传给Django:
要处理媒体文件,只需使用来自"twisted.web"的"static.File",像这样:staticrsrc = static.File(os.path.join(os.path.abspath("."), "mydjangosite/media")),然后把这个资源添加到你的根资源中,像这样:root.putChild("media", staticrsrc)
免责声明:我自己没有尝试过这个,但博客文章看起来很新,作者也愿意回答问题。
补充:还有另一篇关于这个主题的文章,里面有如何让它工作的说明,可以在这里找到,似乎还包括了如何直接用Twisted提供静态文件。
这件事是可以做到的,只是优雅程度有所不同……我明白这是为了过渡,所以可能不需要太美观。
如果你必须让Twisted来处理静态文件,那你要么在Django里搞个代理来处理这些文件,要么在整个系统前面加个东西。还有,Perlbal配合VPATH也能做到这一点,它会用正则表达式来处理网址,让它们指向正确的服务。
如果你不一定要用Twisted,还有很多其他方法可以实现。你可以继续使用Perlbal或者类似的东西来提供静态文件,这样从长远来看也是有必要的。