Tôi đang phát triển một dự án Django (1.3) được sáng tác bởi nhiều ứng dụng. Mỗi ứng dụng có các tệp tĩnh riêng trong thư mục static
riêng của nó. Hơn nữa, tôi đã thêm một thư mục có tên là project_static
nên chứa các tệp tĩnh phổ biến trong các ứng dụng khác nhau, chẳng hạn như jQuery.Quản lý các tệp tĩnh cho nhiều ứng dụng trong Django
Sự cố mà tôi gặp phải ngay lập tức là xung đột đặt tên. Theo mặc định, collectstatic
sẽ chỉ đặt mọi thứ trong thư mục static
toàn cầu mà không phân loại chúng theo ứng dụng. Điều này không hiệu quả đối với tôi, vì mỗi ứng dụng có - ví dụ - một tập tin có tên là css/screen.css
.
Con đường tôi giải quyết nó là bằng cách loại bỏ django.contrib.staticfiles.finders.AppDirectoriesFinder
từ STATICFILES_FINDERS
và sử dụng namespaced static files dirs, vì vậy các thiết lập của tôi bây giờ trông giống như
STATICFILES_DIRS = (
os.path.join(PROJECT_PATH, 'project_static'),
('my_app', os.path.join(PROJECT_PATH, 'my_app', 'static')),
('another_app', os.path.join(PROJECT_PATH, 'another_app', 'static')),
...
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
)
Vấn đề là bằng cách này tôi đã làm mất các tập tin tĩnh cho tất cả các ứng dụng khác, ví dụ django.contrib.admin
. Tất nhiên tôi có thể tự thêm admin, nhưng tôi không chắc chắn làm thế nào để làm điều này mà không vi phạm các admin, trong đó có một cấu trúc thư mục khác nhau.
Có cách nào tốt hơn để quản lý các tệp tĩnh với nhiều ứng dụng không?
nếu chúng tôi phân phát tệp tĩnh bằng nginx thì đây có phải là cách ưa thích không? (giữ các tệp tĩnh, các mẫu trong chính ứng dụng) – Dineshkumar
Vâng. Bạn muốn tất cả các tài sản của bạn được quản lý với dự án của bạn. –