• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed django pliki statyczne

VPS Starter Arubacloud
0 głosów
641 wizyt
pytanie zadane 1 września 2016 w Python przez Pan Kulomb Pasjonat (18,630 p.)
zamknięte 1 września 2016 przez Pan Kulomb

Witam, mam stronę używającą Django 1.10 na linuxpl.com. Nie działają na niej pliki statyczne, a lokalnie działały.

Strona jest w katalogu /home/login/public_html/

Pliki statyczne są w /home/login/public_html/static/

Mam więc ustawione w settings.py:

BASE_DIR = ' /home/login/public_html/'

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),

    '/home/login/public_html/static/',
)

W szablonach HTML na początku jest:

{% load staticfiles %}

A do plików statycznych odwołuję się:

<link rel="stylesheet" href="{% static 'css/base.css' %}">

albo

<img src="/{{ image.url }}">

Gdy wchodzę w podgląd kodu w przeglądarce Chrome zamieniane jest to na:

<link rel="stylesheet" href="/static/css/base.css">

<img src="/static/img/0.jpg">

Próbowałem przy uruchomieniu uWSGI dodać --static-map /static=/home/login/public_html/static. Teraz czekam..

komentarz zamknięcia: I się udało :)

2 odpowiedzi

+1 głos
odpowiedź 1 września 2016 przez Tomatosoup Pasjonat (18,530 p.)

Nie działają na niej pliki statyczne, a lokalnie działały.

Nic dziwnego. Lokalnie serwowaniem plików statycznych zajmuje się django, natomiast na VPSie np. nginx

Najczęściej problem rozwiązuje się po uruchomienie na serwerze komendy

`python manage.py collectstatic`

 

komentarz 1 września 2016 przez Pan Kulomb Pasjonat (18,630 p.)
używam uWSGI, uruchamiałem tę komendę
1
komentarz 1 września 2016 przez Tomatosoup Pasjonat (18,530 p.)
Czy aby na pewno Twój BASE_DIR jest odpowiedni na produkcji?
Nie zaleca się hardcodować miejsca plików, spróbuj z tymi zmiennymi:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
komentarz 1 września 2016 przez Pan Kulomb Pasjonat (18,630 p.)
najpierw miałem BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

ale uznałem, że może to być przyczyna
komentarz 1 września 2016 przez Tomatosoup Pasjonat (18,530 p.)
Jak dalej nie działa, to printuj jaki masz ten BASE_DIR i PROJECT_PATH, zobacz gdzie znajduja sie pliki po komendzie collectstatic, i zobacz czy da sie do nich jakoś dotrzeć - może być  tak że są pod /static/static/ czy coś w ten deseń - spróbuj poszukać
komentarz 1 września 2016 przez Pan Kulomb Pasjonat (18,630 p.)

najpierw było

STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'static')

po wywołaniu (z obecnym i poprzednim STATIC_ROOT)

python manage.py collectstatic 

układ plików jest dobry zarówno w /static jak i public/static

0 głosów
odpowiedź 1 września 2016 przez Czort Nałogowiec (32,500 p.)

Tu nie powinno być listy przypadkiem?

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
 
    '/home/login/public_html/static/',
]

Poza tym czy nie jest to powtórzenie STATIC_URL? Chyba, że jest to celowy zabieg.

1
komentarz 1 września 2016 przez Tomatosoup Pasjonat (18,530 p.)
Lista czy tuple nie ma tutaj znaczenia. Od Django 1.9 wprowadzono w ustawieniach defaultowo wszędzie listy zamiast tuple, ale jak dasz tuple to na jedno wyjdzie
komentarz 1 września 2016 przez Czort Nałogowiec (32,500 p.)
Ok, dobrze wiedzieć:)
komentarz 1 września 2016 przez Tomatosoup Pasjonat (18,530 p.)

Różnica w użyciu będzie taka, że w przypadku tuple gdy jest tylko jeden element, musi być na końcu przecinek, a w liście nie.

Przykład

INSTALLED_APPS = ('core',)

INSTALLED_APPS = [core]

To dlatego że bez przecinka na końcu python interpretowałby go jako string:

INSTALLED_APPS = ('core')
type(INSTALLED_APPS) # <class 'str'>

 

komentarz 1 września 2016 przez Pan Kulomb Pasjonat (18,630 p.)
dodałem drugą ścieżkę dla pewności :)

Podobne pytania

0 głosów
2 odpowiedzi 259 wizyt
pytanie zadane 22 września 2016 w Python przez lukaszek Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 113 wizyt
pytanie zadane 19 maja 2020 w C i C++ przez toja123321 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 1,332 wizyt
pytanie zadane 5 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...