Renderuję szablon, który próbuję stylizować za pomocą zewnętrznego arkusza stylów. Struktura plików jest następująca.
/app
- app_runner.py
/services
- app.py
/templates
- mainpage.html
/styles
- mainpage.css
mainpage.html wygląda następująco
<html>
<head>
<link rel= "stylesheet" type= "text/css" href= "../styles/mainpage.css">
</head>
<body>
<!-- content -->
Żaden z moich stylów nie jest jednak stosowany. Czy ma to coś wspólnego z tym, że HTML jest szablonem, który renderuję? Python wygląda tak.
return render_template("mainpage.html", variables..)
Wiem, że to działa, ponieważ nadal mogę renderować szablon. Jednakże, kiedy próbowałem przenieść mój kod stylizacji z bloku „style” w tagu „head” HTML do pliku zewnętrznego, wszystkie style zniknęły, pozostawiając pustą stronę HTML. Czy ktoś widzi jakieś błędy w mojej strukturze plików?
<script src="{{ url_for('static',filename='javascriptFileName.js') }}"> </script>
W szablonach jinja2 (których używa kolba) użyj
Te
static
pliki są zwykle wstatic
folderze, choć chyba skonfigurowany inaczej.źródło
Przeczytałem wiele wątków i żaden z nich nie rozwiązał problemu, który ludzie opisują i ja też doświadczyłem.
Próbowałem nawet odejść od conda i użyć pip, aby zaktualizować do Pythona 3.7, wypróbowałem wszystkie proponowane kodowania i żaden z nich nie został naprawiony.
A oto dlaczego (problem):
domyślnie python / flask przeszukuje statyczny i szablon w strukturze folderów, takich jak:
możesz zweryfikować samodzielnie za pomocą debuggera na Pycharm (lub cokolwiek innego) i sprawdzić wartości w aplikacji (app = Flask ( name )) i wyszukać teamplate_folder i static_folder
Aby to naprawić, musisz określić wartości podczas tworzenia aplikacji, coś takiego:
ścieżki TEMPLATE_DIR i STATIC_DIR zależą od lokalizacji aplikacji pliku. w moim przypadku, zobacz zdjęcie, znajdował się w folderze pod src.
możesz zmienić szablon i foldery statyczne, jak chcesz i zarejestrować się w aplikacji = Flask ...
Prawdę mówiąc, zacząłem doświadczać problemu, gdy bawiłem się folderem i czasami nie działałem. to rozwiązuje problem raz na zawsze
kod html wygląda następująco:
To jest kod
Tutaj struktura folderów
źródło
Nadal występują problemy po wykonaniu Rozwiązanie dostarczone przez codegeek:
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles/mainpage.css') }}">
?W przeglądarce Google Chrome naciśnięcie przycisku ponownego ładowania (F5) nie spowoduje ponownego załadowania plików statycznych. Jeśli zastosowałeś się do zaakceptowanego rozwiązania, ale nadal nie widzisz zmian wprowadzonych w CSS, naciśnij,
ctrl + shift + R
aby zignorować pliki z pamięci podręcznej i ponownie załadować pliki statyczne.W przeglądarce Firefox naciśnięcie przycisku odświeżania powoduje ponowne załadowanie plików statycznych.
W Edge naciśnięcie przycisku odświeżania nie powoduje przeładowania pliku statycznego. Naciśnięcie
ctrl + shift + R
ma zignorować pliki z pamięci podręcznej i przeładować pliki statyczne. Jednak to nie działa na moim komputerze.źródło
Używam teraz wersji 1.0.2 flask. Powyższe struktury plików nie działały dla mnie, ale znalazłem taki, który działał, a są one następujące:
(Zwróć uwagę, że „statyczne” i „szablony” to foldery, które powinny mieć dokładnie taką samą nazwę).
Aby sprawdzić, jakiej wersji flask używasz, otwórz Pythona w terminalu i wpisz odpowiednio:
źródło
Struktura projektu kolby jest inna. Jak wspomniałeś w pytaniu, struktura projektu jest taka sama, ale jedynym problemem jest folder styles. Folder stylów musi znajdować się w folderze statycznym.
źródło
Jeszcze jeden punkt do dodania do tego wątku.
Jeśli dodasz podkreślenie w nazwie pliku .css, to nie zadziała.
źródło
Jeszcze jeden punkt do dodania. Oprócz powyższych głosów za pozytywnymi odpowiedziami, upewnij się, że poniższy wiersz został dodany do
app.py
pliku:W przeciwnym razie flask nie będzie w stanie wykryć folderu statycznego.
źródło
Jeśli którakolwiek z powyższych metod nie działa, a Twój kod jest doskonały, spróbuj twardego odświeżenia, naciskając Ctrl + F5. Spowoduje to wyczyszczenie wszystkich ścieżek, a następnie ponowne załadowanie pliku. U mnie to zadziałało.
źródło
Jestem prawie pewien, że jest podobny do szablonu Laravel, tak zrobiłem mój.
Odniesiony: problem ze ścieżką do pliku CSS
Prosta aplikacja do kolb, która odczytuje zawartość z pliku .html. Zewnętrzny arkusz stylów jest blokowany?
źródło