Phần quan trọng nhất của câu hỏi nằm trong chủ đề.
Tôi đang tự hỏi thẻ nào là tốt nhất cho trường hợp nào. Hơn nữa ... Tôi tìm thấy mã, mà còn sử dụng settings.STATIC_URL
bao gồm theo {{STATIC_URL}}
trong mẫu.
Tôi hơi bối rối.
Phần quan trọng nhất của câu hỏi nằm trong chủ đề.
Tôi đang tự hỏi thẻ nào là tốt nhất cho trường hợp nào. Hơn nữa ... Tôi tìm thấy mã, mà còn sử dụng settings.STATIC_URL
bao gồm theo {{STATIC_URL}}
trong mẫu.
Tôi hơi bối rối.
Câu trả lời:
Việc xây dựng trong static
mẫu thẻ "liên kết [s] để các tập tin tĩnh được lưu trong STATIC_ROOT
".
Các staticfiles
ứng dụng contrib của static
mẫu thẻ "sử dụng cấu hình STATICFILES_STORAGE
lưu trữ để tạo URL đầy đủ cho các đường dẫn tương đối cho", mà là "đặc biệt hữu ích khi sử dụng một backend lưu trữ không địa phương để triển khai các file".
Việc xây dựng trong static
tài liệu hướng dẫn mẫu thẻ của (liên quan đến ở trên) có một ghi chú cho biết để sử dụng các staticfiles
ứng dụng contrib của static
mẫu thẻ "nếu bạn có một trường hợp sử dụng tiên tiến như sử dụng một dịch vụ đám mây để phục vụ các tập tin tĩnh", và nó mang lại cho ví dụ này của làm như vậy:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Bạn có thể sử dụng {% load staticfiles %}
thay vì {% load static from staticfiles %}
nếu bạn muốn, nhưng cái sau rõ ràng hơn.
{% load static %}
. "Trong các phiên bản cũ hơn, bạn phải sử dụng {% load static from staticfiles %}
trong mẫu của mình để cung cấp tệp từ bộ nhớ được xác định trong STATICFILES_STORAGE. Điều này không còn bắt buộc."
{% load static %}
.
Tôi không biết sự khác biệt được cho là gì, nhưng tôi đã tìm thấy sự khác biệt về trường hợp sử dụng (sử dụng django 1.9.1 chạy qua apache, wsgi trên Python 3.4). Trong ứng dụng của tôi, tôi có một số hình ảnh trong ImageFields
cơ sở dữ liệu. Nếu tôi sử dụng mã như thế này trong mẫu của mình:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
sau đó, nếu tôi sử dụng {% load static %}
, django ném dấu TypeError
( Cannot mix str and non-str arguments
). Điều này có lẽ là do object.image
chuỗi không phải là một chuỗi, mà là một ImageField
, được chuyển đổi thành chuỗi ở một số giai đoạn sau. Tuy nhiên, nếu ai sử dụng {% load staticfiles %}
không xảy ra lỗi như vậy.
Thật không may, tôi đã phát hiện ra sự khác biệt này sau khi dành hàng giờ để khắc phục sự cố. Tôi đã cố gắng tìm ra cách giải quyết khi sử dụng tùy chọn đầu tiên, cụ thể là thêm phương thức chuyển đổi chuỗi vào đối tượng như sau:
#image string
def image_str(self):
return str(self.image)
Hy vọng kiến thức này sẽ có ích cho ai đó.
Tài liệu Django bây giờ thích hơn {% load static %}
.
{% load staticfiles %}
hoạt động nhưng tôi nghĩ nó không được dùng nữa.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
Tham khảo các tài liệu , nơi có một lời giải thích hay về nó. Trên thực tế, {% static %}
thẻ mẫu biết vị trí của STATICFILE_STORAGE
Như các tài liệu nói:
{% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg".
Điều này đặc biệt hữu ích khi sử dụng phần phụ trợ lưu trữ không cục bộ để triển khai tệp dưới dạng tài liệu trong Cung cấp tệp tĩnh từ dịch vụ đám mây hoặc CDN.
Nếu bạn muốn truy xuất một URL tĩnh mà không hiển thị nó, bạn có thể sử dụng một lệnh gọi hơi khác:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
Hy vọng rằng sẽ giúp !!
{% load static %}
, {% load staticfiles %}
, {{STATIC_URL}}
... và biết tôi không biết sự khác biệt giữa những gì là {% load static %}
và{% load static from staticfiles %}