在运行Web应用程序的Flask中的Sphinx文档

时间:2013-02-16 17:00:03

标签: flask python-sphinx

我在本地构建了静态Sphinx文档(使用make html)。

我现在希望将Sphinx文件集成到我使用Flask运行的webapp中。从Flask运行应用程序中,我只是想包含一个指向Sphinx文档的超链接,它将作为应用程序的帮助。

Websupport似乎是要遵循的方式,但我不清楚如何将Flask框架与Sphinx文件联系起来。

感谢您的帮助,

此致

4 个答案:

答案 0 :(得分:5)

您可以使用Web服务器处理它,就像处理Flask中的/static目录一样。例如,如果您使用Apache作为生产Web服务器,则可以添加

Alias /documentation /location/of/sphinx/html
<Directory /location/of/sphinx/html>
    Order deny,allow
    Allow from all
</Directory>

到您的Apache站点配置,然后您可以直接链接到http://yoursite.com/documentation以访问Sphinx文件,完全避免使用Flask。

答案 1 :(得分:5)

其他解决方案很好地省略了Flask对象初始化,这导致我将头部撞到墙上一会儿。

完全不接触Sphinx项目结构的情况,以下是对我有用的解决方案:

from flask import Flask

app = Flask(__name__, static_url_path='/', static_folder='_build/html/')


@app.route('/')
@app.route('/<path:path>')
def serve_sphinx_docs(path='index.html'):
    return app.send_static_file(path)


if __name__ == '__main__':
    app.run(debug=True)

下面是项目的文件结构,其中<doc>代表我为文档实际编写的第一个文件,app.py是包含上面Flask应用程序代码的文件。

.
├── Makefile
├── _build
│   ├── doctrees
│   │   ├── index.doctree
│   │   ├── <doc>.doctree
│   │   ├── ...
│   │   └── <doc>.doctree
│   └── html
│       ├── _images
│       ├── _modules
│       │   ├── index.html
│       │   └── <package name>
│       │       └── ...
│       ├── _sources
│       │   ├── <doc>.rst.txt
│       │   ├── ...
│       │   └── <doc>.rst.txt
│       ├── _static
│       │   ├── ajax-loader.gif
│       │   ├── alabaster.css
│       │   └── ...
│       ├── genindex.html
│       ├── index.html
│       ├── objects.inv
│       ├── py-modindex.html
│       ├── search.html
│       ├── searchindex.js
│       ├── <doc>.html
│       ├── ...
│       └── <doc>.html
├── _static
│   ├── custom.css
│   └── <myimage>.gif
├── _templates
├── app.py
├── conf.py
├── index.rst
├── make.bat
├── <doc>.rst
├── ...
└── <doc>.rst

答案 2 :(得分:3)

您可以将文档中的_build/html文件夹复制到烧瓶doc目录中的static文件夹中,并使用以下规则为其提供服务:

@app.route('/doc/<dir>/<filename>', defaults={'static': True})
def doc(dir='',filename='index.html'):
    path = join(dir,filename)
    return app.send_static_file(path)

答案 3 :(得分:2)

在某些情况下,您不希望将文档公开给所有用户,因此无法在Apache或Nginx级别进行配置。以下对我有用:

@app.route('/docs', defaults = {'filename': 'index.html'})
@app.route('/docs/<path:filename>')
@login_required
def web_docs(filename):
    path = os.path.join('docs/html', filename)
    return app.send_static_file(path)