如何使用cherrypy自定义404错误页面加载子文件夹

问题描述 投票:0回答:1

我想覆盖在cherrypy中显示的404错误页面到我的自定义错误页面。挑战是读取包含我的index.html的目录中的所有子文件夹。这些子文件夹是img,css,js ......

根据cherrypy documentation,我发现我可以自定义404错误页面覆盖此函数并以下列形式执行cherrypy.config.update:

  _cp_config = {
       'error_page.404': os.path.join(localDir, "static/index.html")
   }

我成功定制了页面,并成功地加载了我的html。

这是我的代码加载html(但不是该文件夹中的子目录)。

import cherrypy
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
application = get_wsgi_application()
WEBAPP = "/app-web/"
CONF_WEBAPP = {'/':
           {'tools.staticdir.on': True,
            'tools.staticdir.dir': WEBAPP,
            'tools.staticdir.index': 'index.html'}}
WEB_ROOT = '/webclient/'

class ServeWebApp(object):
    @cherrypy.expose
    def index(self):
        pass

if __name__ == '__main__':
    cherrypy.tree.graft(application, '/')
    cherrypy.tree.mount(ServeWebApp(), '/webapp', config=CONF_WEBAPP)
    cherrypy.config.update({'error_page.404': os.path.join(WEB_ROOT, "index.html")})
    cherrypy.server.socket_host = "0.0.0.0"
    cherrypy.server.socket_port = 8000
    cherrypy.server.thread_pool = 100

    cherrypy.engine.start()
    cherrypy.engine.block()

我正在服务一个完全正常运行的静态网站,使用css和js声明CONF_WEBAPP并在行中加载:

cherrypy.tree.mount(ServeWebApp(),'/ webapp',config = CONF_WEBAPP)

在我的文件夹WEB_ROOT里面我有一个index.html文件,还有一组文件夹{css,js,fonts,img}。我想加载索引文件和该文件夹中的所有子目录。可能吗?有没有其他方法可以得到相同的结果?我不能使用其他工具来显示自定义页面(如Nginx,apache)。

Another method to customize but I could not follow that way because it uses functions

python http-status-code-404 cherrypy
1个回答
0
投票

这是我如何解决我的问题。

首先我在我的virtualenv中安装了lib requests

import requests
from ConfigParser import RawConfigParser
config = RawConfigParser()
#file with my urls I would like to use in my app.
config.read('myparams.ini')


class PlatformAndroid(object):
    android_url = config.get('links', 'android')#static url to play store
    redir = requests.get(android_url)
    if redir.status_code < 400: #case my app is published in play store
        raise cherrypy.HTTPRedirect(android_url)
    #unpublished app
    raise cherrypy.HTTPRedirect(config.get('links','webapp')) #fallback to webapp version of my platform specific app.

if __name__ == '__main__':

    cherrypy.tree.mount(PlatformAndroid(), '/android')

    cherrypy.engine.start()
    cherrypy.engine.block()

myparams.ini

[links]

android : http://play.google.com/store/apps/
ios : http://itunes.apple.com/us/app/
webapp : http://mysite.example.com/webapp/
© www.soinside.com 2019 - 2024. All rights reserved.