Po pierwsze, potrzebujesz serwera deweloperskiego, aby faktycznie służyć main.js
, w przeciwnym razie nie będzie dostępny dla przeglądarki.
Jest zwyczajem, aby umieścić wszystkie .js
i .css
plików w katalogu w małych aplikacji internetowych static
, więc powinien wyglądać tak:
app.py
- static/
main.js
- views/
index.tpl
W żadnym wypadku dokładnie ten nazewnictwa i układ jest wymagane, tylko często używany.
Następnie należy dostarczyć do obsługi plików statycznych:
from bottle import static_file
# ...
@route('/static/:path#.+#', name='static')
def static(path):
return static_file(path, root='static')
Będzie actuall służyć plików pod static/
do przeglądarki.
Teraz do ostatniej rzeczy. Określono JavaScript jako:
<script type="text/javascript" src="js/main.js" charset="utf-8"></script>
To oznacza ścieżkę do .js
jest względną do bieżącej strony. Na twoim serwerze programistycznym strona indeksu (/
) będzie szukała .js
w /js/main.js
, a inna strona (na przykład /post/12
) będzie szukała go w /post/12/js/main.js
i na pewno się nie powiedzie.
Zamiast tego należy użyć funkcji get_url
, aby prawidłowo odnieść się do plików statycznych.Twój handler powinien wyglądać następująco:
from Bottle import get_url
# ...
@route('/')
@view('index')
def index():
return { 'get_url': get_url }
I index.tpl
, .js
powinny być oznaczone jako:
<script type="text/javascript" src="{{ get_url('static', path='main.js') }}" charset="utf-8"></script>
get_url
znajdzie obsługi z name='static'
i oblicza właściwą ścieżkę do niego. W przypadku serwera dev zawsze będzie to /static/
. Można chyba nawet ciężko to kod w szablonie, ale nie polecam go z dwóch powodów:
- nie będziesz w stanie zamontować swoją aplikację w dowolnym miejscu, ale pod korzeń w produkcji; tj. po przesłaniu go na serwer porducyjny można go umieścić pod numerem http://example.com/ (root), ale nie pod numerem http://example.com/myapp/.
- Jeśli zmienisz lokalizację katalogu
/static/
, będziesz musiał przeszukać wszystkie szablony i zmodyfikować je w każdym szablonie.
próbowałeś jakiś debugowania, jak drukowanie ścieżkę korzeni i zawartość folderu js? –