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?

user1431282
źródło

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ę .

tbicr
źródło
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.

Andrew Grow
źródło
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