21

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

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

Websupport似乎是要遵循的方式,但我不清楚我应该如何将 Flask 框架连接到 Sphinx 文件。

谢谢你的帮助,

问候

4

5 回答 5

13

其他解决方案很好地省略了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
于 2018-08-05T02:26:25.513 回答
8

你可以用你的网络服务器来处理它,就像你/static在 Flask 中处理目录一样。例如,如果您使用 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。

于 2013-02-17T02:18:14.813 回答
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)
于 2014-03-27T19:18:41.573 回答
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)
于 2017-02-09T01:32:42.487 回答
0

BUILDDIR在 sphinx Makefile 中设置路径

BUILDDIR      = app/static/docs

添加烧瓶路线

@app.get('/docs/')
@app.get('/docs/<path:filename>')
def get_docs(filename='index.html'):
    path = os.path.join('docs/html', filename)
    return app.send_static_file(path)

构建 sphinx 文档。

$ make html

您可以浏览http://127.0.0.1:5000/docs以获取 sphinx 文档页面。所有 sphinx docs 静态文件都将在此路由下提供。如果需要,您还可以将 Flask 身份验证添加到路由。

测试版本:

  • 烧瓶:2.0.2
  • 狮身人面像:4.3.1
于 2021-12-18T15:15:55.873 回答