Połącz z plikami statycznymi Flask za pomocą adresu url_for


91

Jak używać url_forw Flask odniesienia do pliku w folderze? Na przykład mam kilka plików statycznych w staticfolderze, z których niektóre mogą znajdować się w podfolderach, takich jak static/bootstrap.

Kiedy próbuję obsłużyć plik z static/bootstrap, pojawia się błąd.

 <link rel=stylesheet type=text/css href="{{ url_for('static/bootstrap', filename='bootstrap.min.css') }}">

Dzięki temu mogę odwoływać się do plików, których nie ma w podfolderach, co działa.

 <link rel=stylesheet type=text/css href="{{ url_for('static', filename='bootstrap.min.css') }}">

Jaki jest właściwy sposób odwoływania się do plików statycznych url_for? Jak url_forgenerować adresy URL do plików statycznych na dowolnym poziomie?

Odpowiedzi:


182

Masz domyślnie staticpunkt końcowy dla plików statycznych. W Flaskaplikacji występują również następujące argumenty:

static_url_path: może służyć do określenia innej ścieżki do plików statycznych w Internecie. Domyślnie nazwa static_folderfolderu.

static_folder: folder z plikami statycznymi, które powinny być udostępniane static_url_path. Domyślnie jest to folder „static” w ścieżce głównej aplikacji.

Oznacza to, że filenameargument przyjmie względną ścieżkę do twojego pliku w static_folderi przekonwertuje go na ścieżkę względną połączoną z static_url_default:

url_for('static', filename='path/to/file')

przekonwertuje ścieżkę pliku z static_folder/path/to/filena ścieżkę adresu URL static_url_default/path/to/file.

Więc jeśli chcesz pobrać pliki z static/bootstrapfolderu, użyj tego kodu:

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/bootstrap.min.css') }}">

Na który zostanie przekonwertowany (przy użyciu ustawień domyślnych):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css">

Spójrz także na url_fordokumentację .


Zauważ, że Flaskdodaje regułę adresu URL dla staticpunktu końcowego podczas inicjalizacji, więc zmiana tych atrybutów w Flaskinstancji nie zmienia url_for('static', ...)wyniku. Aby zmienić statyczny punkt końcowy po inicjalizacji, zobacz to streszczenie gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
— Bryce Guinta

1

W moim przypadku miałem specjalną instrukcję do pliku konfiguracyjnego nginx:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
    }

Wszyscy klienci otrzymali „404”, ponieważ nginx nic nie wie o Flask.

Mam nadzieję, że to komuś pomoże.


Podstawowy plik konfiguracyjny to /etc/nginx/nginx.conf (w systemie Linux). To może być podobna ścieżka na Windowsie (naprawdę nie wiem)
— Andrew Grow

To jest konfiguracja po stronie serwera, jeśli dopiero tworzysz aplikację na komputerze, prawdopodobnie jej nie masz / nie potrzebujesz.
— adamczi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.