2015-06-11 4 views
1

У меня есть WEB-приложение с некоторой статической страницей WEB (документация). Я хотел бы документацию (написанную в HTML), чтобы быть доступными из приложения, работающего под CherryPy, но и как статические файлы, которые мы можем открыть без запуска сервера WEB ...Сделать статический каталог HTML доступным с помощью CherryPy и файловым протоколом

class AppServer(JFlowServer): 

    @cherrypy.expose 
    def index(self, **kwargs): 
     return " ".join(open(os.path.join(WEB_DIR, "index.html")).readlines()) 


    @cherrypy.expose 
    def test(self, **kwargs): 
     return " ".join(open(os.path.join(WEB_DIR, "test.html")).readlines()) 

это работает отлично, но поскольку у меня есть несколько страниц, от cherrypy ссылка должна быть «/ test», где в статическом режиме у меня есть «/test.html». Я хотел сделать CherryPy отображает URL, но я не мог найти способ сделать это ...

спасибо за вашу помощь, Джером

ответ

3

Вы можете достичь его с staticdir tool и с применением относительных URL-адресов в документации , Последним будет также доступ как от http: //, так и файл: // протоколов.

Вот как это может выглядеть.

. 
├── app.py 
└── docs 
    ├── a.html 
    ├── b.html 
    └── index.html 

app.py

#!/usr/bin/env python3 


import os 

import cherrypy 


path = os.path.abspath(os.path.dirname(__file__)) 
config = { 
    'global' : { 
    'server.socket_host' : '127.0.0.1', 
    'server.socket_port' : 8080, 
    'server.thread_pool' : 8, 
    }, 
    '/docs' : { 
    'tools.staticdir.on' : True, 
    'tools.staticdir.dir' : os.path.join(path, 'docs'), 
    'tools.staticdir.index' : 'index.html', 
    'tools.gzip.on'   : True 
    } 
} 


class App: 

    @cherrypy.expose 
    def index(self): 
    return '''Some dynamic content<br/><a href="/docs">See docs</a>''' 


if __name__ == '__main__': 
    cherrypy.quickstart(App(), '/', config) 

документы/index.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>Docs index</title> 
</head> 
<body> 
    <p><a href='/'>Back to home page</a> (not relevant from file://)</p> 
    <p><a href='a.html'>See A</a></p> 
    <p><a href='b.html'>See B</a></p> 
</body> 
</html> 

документы/a.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>A page</title> 
</head> 
<body> 
    <p><a href='index.html'>Back to index</a></p> 
    <p><a href='b.html'>See B</a></p> 
</body> 
</html> 

Docs/b.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>B page</title> 
</head> 
<body> 
    <p><a href='index.html'>Back to index</a></p> 
    <p><a href='a.html'>See A</a></p> 
</body> 
</html> 
+0

спасибо за ответ, но это не то, что я хочу. Я хочу, чтобы html-страницы возвращались самим сервером Cherrypy! Здесь есть только ссылка на документацию. – user1595929

+0

@ user1595929 HTML-страницы действительно обслуживаются программой CherryPy, которую вы можете подтвердить, посетив 'http: // localhost: 8080/docs' и ссылки ниже, в то время как фрагмент работает. Они обслуживаются инструментом, и у вас нет обработчика в вашем коде. Это не должно вас смущать. – saaj

+0

да, вы правы! благодаря – user1595929