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

question-closed django pliki statyczne

Cloud VPS
0 głosów
930 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 343 wizyt
pytanie zadane 22 września 2016 w Python przez lukaszek Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 19 maja 2020 w C i C++ przez toja123321 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 1,777 wizyt
pytanie zadane 5 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,908 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

Kursy INF.02 i INF.03
...