2015-11-02 19 views
6

Chcę załadować moje statyczne pliki css (np Bootstrap) z mojego katalogu node_modules, tak:Jaki jest prawidłowy sposób ładowania plików statycznych CSS przy użyciu npm i Django?

{% load staticfiles %} 
<link rel="stylesheet" href="{% static 'bootstrap/dist/css/bootstrap.min.css' %}" /> 

Kiedy kładę .../node_modules/ w moim otoczeniu STATICFILES_DIRS, to działa. Jednak dodaje on również absolutnie ogromną liczbę plików do mojego folderu /static/ - głównie devDependencies, do których nie potrzebuję dostępu w interfejsie użytkownika.

Jaki jest najlepszy sposób włączania pewnych zasobów statycznych za pośrednictwem npm, ale nie obejmuje wszystkiego od node_modules w moim folderze /static/?

Czy to w porządku, że zawiera tyle nieistotnych plików i czy to najlepsze rozwiązanie?

Odpowiedz

0

Co mogę zrobić, to dodaje,

STATICFILES_DIRS = (
    os.path.join(DJANGO_PROJECT_DIR, 'static'), 
    os.path.join(ROOT_DIR, 'node_modules', 'd3', 'build'), 
    os.path.join(ROOT_DIR, 'node_modules', 'c3'), 
) 

To będzie miejsce tylko potrzebne pliki w moim folderze statycznej.

+0

dzięki - dzięki temu możesz dodawać ścieżki plików tutaj. Spodziewałbym się, że podniesie to 'OSError: [Errno 20] Not a directory' w metodzie [storage 'listdir'] (https://github.com/django/django/blob/967be82443b5640d61608a89897d8ce2bc44fa54/django/core/files /storage.py#L397). Jakie jest twoje ustawienie "STATICFILES_STORAGE"? Również w jaki sposób dodać je do swojego szablonu? – YPCrumble

+0

Niestety, popełniłem błąd. Poprawię odpowiedź. Nie powinienem ładować plików – Jostcrow

+0

Widzę - ale czy potrzebujesz też osobnej linii dla każdego pliku w twoim szablonie? – YPCrumble

0

Osobiście uważam, że to dobrze, że te zewnętrzne pliki dev żyją w module node_modules (i są duplikowane w STATIC_ROOT). Twój przebieg może się różnić, jeśli twój folder node_modules jest gigantyczny, ale podwojenie rozmiaru nie jest zazwyczaj wielką sprawą dla moich przypadków użycia i wygodnie jest nie wyświetlać każdego modułu w STATICFILES_DIRS podczas ich instalacji.

STATICFILES_DIRS = (
    ... 
    os.path.join(BASE_DIR, 'node_modules'), 
    ... 
) 

Następnie w szablonach, zrobić:

<script src='{% static 'bootstrap/dist/css/bootstrap.min.css' %}'></script> 

Jeśli folder kiedykolwiek udało nam się z rąk rozmiar-mądry, jeśli zaczęło napotkania konfliktów, lub jeśli nie było biblioteki naprawdę nie zrobił” Jeśli chcesz służyć, odpowiedź Jostcrowa (lub napisanie niestandardowej wyszukiwarki statycznych plików) może mieć sens.

Warto również przyjrzeć się próbie połączenia wszystkich elementów. Jeśli wszystkie Twoje pliki znajdują się w dołączonych plikach JS/CSS, cały problem rozwiązuje się, po prostu dołączając te pliki do wybranej aplikacji.