Hubungkan ke file statis Flask dengan url_for

91

Bagaimana Anda menggunakan url_forFlask untuk mereferensikan file di folder? Misalnya, saya memiliki beberapa file statis di staticfolder, beberapa di antaranya mungkin ada di subfolder seperti static/bootstrap.

Saat saya mencoba menyajikan file dari static/bootstrap, saya mendapatkan error.

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

Saya dapat merujuk file yang tidak ada di subfolder dengan ini, yang berfungsi.

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

Dengan apa cara yang benar untuk mereferensikan file statis url_for? Bagaimana cara saya url_formenghasilkan url ke file statis di tingkat mana pun?

pengguna1431282
sumber

Jawaban:

182

Anda memiliki statictitik akhir secara default untuk file statis. FlaskAplikasi juga memiliki argumen berikut:

static_url_path: dapat digunakan untuk menentukan jalur berbeda untuk file statis di web. Default-nya adalah nama static_folderfolder.

static_folder: folder dengan file statis yang seharusnya disajikan di static_url_path. Secara default, folder 'statis' di jalur akar aplikasi.

Artinya, filenameargumen akan mengambil jalur relatif ke file Anda static_folderdan mengubahnya menjadi jalur relatif yang dikombinasikan dengan static_url_default:

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

akan mengonversi jalur file dari static_folder/path/to/fileke jalur url static_url_default/path/to/file.

Jadi jika Anda ingin mendapatkan file dari static/bootstrapfolder tersebut Anda menggunakan kode ini:

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

Yang akan diubah menjadi (menggunakan pengaturan default):

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

Lihat juga url_fordokumentasi .

tbicr
sumber
Perhatikan bahwa Flaskmenambahkan aturan url untuk statictitik akhir setelah inisialisasi sehingga mengubah atribut ini pada sebuah Flaskinstance tidak mengubah url_for('static', ...)hasilnya. Untuk mengubah inisialisasi pos titik akhir statis, lihat inti ini gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
Bryce
1

Dalam kasus saya, saya memiliki instruksi khusus ke dalam file konfigurasi nginx:

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

Semua klien telah menerima '404' karena nginx tidak mengetahui apapun tentang Flask.

Saya harap ini membantu seseorang.

Andrew Grow
sumber
File konfigurasi utama adalah /etc/nginx/nginx.conf (di Linux). Ini mungkin jalur yang serupa di Windows (saya tidak tahu benar-benar)
Andrew Grow
Ini adalah konfigurasi sisi server, jika Anda hanya mengembangkan aplikasi di desktop Anda, Anda mungkin tidak memiliki / membutuhkannya.
adamczi