Я пытаюсь взломать пример встроенного приложения tornado, чтобы добавить собственные CSS и JS. Кажется, я не могу правильно связать css и js. Следует ли ожидать, что файлы css и js будут нормально связываться в заголовке документа?

<head>
<link href="/static/css/custom.css" rel="stylesheet" type="text/css">
<script src="/static/js/custom.js"></script>
</head>

... или мне следует использовать пользовательский статический эффект боке обработчик, чтобы сначала все загрузить?

... или я могу просто передать его в обработчик индекса примерно так:

class IndexHandler(RequestHandler):
    def get(self):
        template = env.get_template('embed.html')
        static = env.get_static('/css/style.css')
        script = server_document('default')
        self.write(template.render(script=script, template="Tornado", static=static))

Для справки:

app
|__data
|__static
|    |__css
|       |__custom.css
|    |__js
|       |__custom.js
|__templates
|    |__embed.html
|__main.py

Просто ищу общее руководство. Спасибо.

2
crashMOGWAI 2 Янв 2018 в 23:58

2 ответа

Лучший ответ

При вызове Server в extra_patterns можно добавить что-то подобное:

(server_static_route, StaticFileHandler, { "path" : local_path_to_static_dir })

Где StaticFileHandler происходит от tornado.web.

0
bigreddot 3 Янв 2018 в 00:53

Ответ bigreddot правильный, но я хотел бы добавить некоторые детали. В моем случае я хочу получить доступ к содержимому /static/css. Вам понадобятся:

from tornado.web import StaticFileHandler
import os.path as op

А затем добавьте следующий обработчик приложения при открытии сервера:

[(r'/static/css/(.*)', StaticFileHandler,
 {'path': op.normpath(op.dirname(op.abspath(__file__)) + r'/static/css')})]

Он передается вместе с любыми другими обработчиками приложения в параметр extra_patterns.

1
Tim Schellenberg 23 Авг 2019 в 20:20