Ну, во-первых, вам нужен ваш dev-сервер для фактического обслуживания main.js
, иначе он не будет доступен для браузера.
Обычно все файлы .js
и .css
помещаются вкаталог static
в небольших веб-приложениях, поэтому ваш макет должен выглядеть следующим образом:
app.py
- static/
main.js
- views/
index.tpl
Ни в коем случае это точное наименование и макет не требуется, только часто используется.
Далее,Вы должны предоставить обработчик для статических файлов:
from bottle import static_file
# ...
@route('/static/:path#.+#', name='static')
def static(path):
return static_file(path, root='static')
Это будет отображать ваши файлы в браузере под static/
.
Теперь, до последней вещи.Вы указали свой JavaScript как:
<script type="text/javascript" src="js/main.js" charset="utf-8"></script>
Это означает, что путь к .js
равен относительно текущей страницы.На вашем сервере разработки страница индекса (/
) будет искать .js
в /js/main.js
, а другая страница (скажем, /post/12
) будет искать ее в /post/12/js/main.js
, и она обязательно завершится с ошибкой.
Вместо этого вам нужно использовать функцию get_url
для правильной ссылки на статические файлы.Ваш обработчик должен выглядеть следующим образом:
from Bottle import get_url
# ...
@route('/')
@view('index')
def index():
return { 'get_url': get_url }
А в index.tpl
на .js
следует ссылаться как:
<script type="text/javascript" src="{{ get_url('static', path='main.js') }}" charset="utf-8"></script>
get_url
находит обработчик с name='static'
,и вычисляет правильный путь к нему.Для сервера dev это всегда будет /static/
.Вы, вероятно, даже можете жестко закодировать его в шаблоне, но я не рекомендую его по двум причинам:
- Вы не сможете монтировать ваше приложение где-либо, кроме как под root, в рабочей среде;то есть, когда вы загружаете его на сервер переноса, его можно поместить в http://example.com/ (root), но не в http://example.com/myapp/.
- Если вы измените местоположение
/static/
dir, вы 'Вам придется искать его по всем вашим шаблонам и изменять его в каждом шаблоне.