Liên kết đến các tệp tĩnh của Flask bằng url_for


91

Làm thế nào để bạn sử dụng url_fortrong Flask để tham chiếu một tệp trong một thư mục? Ví dụ, tôi có một số tệp tĩnh trong staticthư mục, một số tệp có thể nằm trong các thư mục con chẳng hạn như static/bootstrap.

Khi tôi cố gắng cung cấp một tệp từ đó static/bootstrap, tôi gặp lỗi.

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

Tôi có thể tham chiếu các tệp không có trong thư mục con với cái này, cách này hoạt động.

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

Cách chính xác để tham chiếu tệp tĩnh với là url_forgì? Làm cách nào url_forđể tạo url cho tệp tĩnh ở bất kỳ cấp nào?

Câu trả lời:


182

Theo mặc định, bạn có staticđiểm cuối cho các tệp tĩnh. Ngoài ra Flaskứng dụng có các đối số sau:

static_url_path: có thể được sử dụng để chỉ định một đường dẫn khác cho các tệp tĩnh trên web. Mặc định là tên của static_folderthư mục.

static_folder: thư mục chứa các tệp tĩnh sẽ được phục vụ tại static_url_path. Mặc định là thư mục 'tĩnh' trong đường dẫn gốc của ứng dụng.

Có nghĩa là filenameđối số sẽ lấy một đường dẫn tương đối đến tệp của bạn static_foldervà chuyển đổi nó thành một đường dẫn tương đối kết hợp với static_url_default:

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

sẽ chuyển đổi đường dẫn tệp từ static_folder/path/to/filethành đường dẫn url static_url_default/path/to/file.

Vì vậy, nếu bạn muốn lấy tệp từ static/bootstrapthư mục, bạn sử dụng mã này:

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

Sẽ được chuyển đổi thành (sử dụng cài đặt mặc định):

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

Cũng nhìn vào url_fortài liệu .


Lưu ý rằng Flaskthêm quy tắc url cho staticđiểm cuối khi khởi tạo để thay đổi các thuộc tính này trên một Flaskphiên bản không thay đổi url_for('static', ...)kết quả. Để thay đổi quá trình khởi tạo bài đăng điểm cuối tĩnh, hãy xem gist gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
Bryce Guinta

1

Trong trường hợp của tôi, tôi đã có hướng dẫn đặc biệt vào tệp cấu hình nginx:

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

Tất cả khách hàng đã nhận được '404' vì nginx không biết gì về Flask.

Tôi hy vọng nó sẽ giúp ai đó.


Tệp cấu hình chính là /etc/nginx/nginx.conf (trên Linux). Nó có thể là con đường tương tự như trên Windows (Tôi không biết thực sự)
Andrew Grow

Đây là cấu hình phía máy chủ, nếu bạn chỉ đang phát triển một ứng dụng trên máy tính để bàn của mình, có thể bạn không có / cần nó.
adamczi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.