webentwicklung-frage-antwort-db.com.de

Wie können statische Dateien aus einem anderen Verzeichnis als dem statischen Pfad bereitgestellt werden?

Ich versuche das:

favicon_path = '/path/to/favicon.ico'

settings = {'debug': True, 
            'static_path': os.path.join(PATH, 'static')}

handlers = [(r'/', WebHandler),
            (r'/favicon.ico', tornado.web.StaticFileHandler, {'path': favicon_path})]

application = tornado.web.Application(handlers, **settings)
application.listen(port)
tornado.ioloop.IOLoop.instance().start()

Es dient jedoch weiterhin dem favicon.ico, den ich in meinem static_path habe (ich habe zwei verschiedene favicon.icos in zwei getrennten Pfaden, wie oben angegeben, aber ich möchte den in static_path überschreiben können).

31
shino

Löschen Sie static_path aus den App-Einstellungen.

Stellen Sie dann Ihren Handler wie folgt ein:

handlers = [
            (r'/(favicon\.ico)', tornado.web.StaticFileHandler, {'path': favicon_path_dir}),
            (r'/static/(.*)', tornado.web.StaticFileHandler, {'path': static_path_dir}),
            (r'/', WebHandler)
]
50
Not_a_Golfer

Sie müssen favicon.ico mit Klammern umschließen und den Punkt im regulären Ausdruck mit Escapezeichen versehen. Ihr Code wird werden

favicon_path = '/path/to/favicon.ico' # Actually the directory containing the favicon.ico file

settings = {
    'debug': True, 
    'static_path': os.path.join(PATH, 'static')}

handlers = [
    (r'/', WebHandler),
    (r'/(favicon\.ico)', tornado.web.StaticFileHandler, {'path': favicon_path})]

application = tornado.web.Application(handlers, **settings)
application.listen(port)
tornado.ioloop.IOLoop.instance().start()
6
user1876508

Es gibt zwei Möglichkeiten, dies zu tun.

1. Verwenden Sie static_url_prefix in den Einstellungen.

z.B.

settings = dict(
    static_path=os.path.join(os.path.dirname(__file__), 'static'),
    static_url_prefix="/adtrpt/static/",
)

2. Verwenden Sie einen benutzerdefinierten Handler

Angepassten Handler an Handler anhängen

handlers.append((r"/adtrpt/static/(.*)", MyStaticFileHandler, {"path": os.path.join(os.path.dirname(__file__), 'static')}))

Implementieren Sie dann Ihre benutzerdefinierten Methoden.

class StaticHandler(BaseHandler):
    def get(self):
        path = self.request.path
        print(path)
        self.redirect(BASE_URI + path)
0
Jason Yu