Việc cung cấp các tệp tĩnh có thể đạt được theo một số cách; đây là những ghi chú của tôi cho bản thân:
- thêm
static/my_app/
thư mục vào my_app
(xem ghi chú về không gian tên bên dưới)
- xác định một thư mục cấp cao nhất mới và thêm nó vào STATICFILES_DIRS trong settings.py (lưu ý rằng
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Tôi thích cách đầu tiên hơn và thiết lập gần với cách được xác định trong tài liệu , vì vậy để phân phát tệp admin-custom.css
ghi đè một vài kiểu quản trị, tôi có một thiết lập như sau:
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Điều này sau đó được sử dụng trong mẫu như sau:
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Trong quá trình phát triển, nếu bạn sử dụng django.contrib.staticfiles [ed: install by default], điều này sẽ được thực hiện tự động bởi máy chủ chạy khi DEBUG được đặt thành True [...]
https://docs.djangoproject.com/en/1.10/howto/static-files/
Khi triển khai, tôi chạy collectstatic
và cung cấp các tệp tĩnh với nginx.
Các tài liệu đã giải tỏa mọi bối rối cho tôi:
STATIC_ROOT
Đường dẫn tuyệt đối đến thư mục nơi Collectstatic sẽ thu thập các tệp tĩnh để triển khai.
... nó không phải là nơi lưu trữ vĩnh viễn các tệp tĩnh của bạn. Bạn nên làm điều đó trong các thư mục sẽ được tìm thấy bởi các công cụ tìm của staticfiles, theo mặc định, là các thư mục con ứng dụng 'tĩnh /' và bất kỳ thư mục nào bạn đưa vào STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
Khoảng cách tên tệp tĩnh
Bây giờ chúng ta có thể thoát khỏi việc đưa các tệp tĩnh của mình trực tiếp vào my_app / static / (thay vì tạo một thư mục con my_app khác), nhưng đó thực sự là một ý tưởng tồi. Django sẽ sử dụng tệp tĩnh đầu tiên mà nó tìm thấy có tên khớp và nếu bạn có tệp tĩnh có cùng tên trong một ứng dụng khác, Django sẽ không thể phân biệt giữa chúng. Chúng ta cần phải chỉ ra Django ở đúng vị trí và cách dễ nhất để đảm bảo điều này là đặt tên cho chúng. Đó là, bằng cách đặt các tệp tĩnh đó bên trong một thư mục khác được đặt tên cho chính ứng dụng đó.
https://docs.djangoproject.com/en/1.10/howto/static-files/
STATICFILES_DIRS
Dự án của bạn có thể cũng sẽ có các tài sản tĩnh không gắn với một ứng dụng cụ thể. Ngoài việc sử dụng thư mục tĩnh / bên trong ứng dụng của mình, bạn có thể xác định danh sách các thư mục (STATICFILES_DIRS) trong tệp cài đặt của mình, nơi Django cũng sẽ tìm kiếm các tệp tĩnh.
https://docs.djangoproject.com/en/1.10/howto/static-files/
from django.conf import settings
tất nhiên