[Django] Static Files bei Uberspace um CSS zu laden

Django, Flask, Bottle, WSGI, CGI…
Antworten
Bemme90
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 06:42

Sonntag 11. August 2019, 14:13

Hallo liebes Forum,

da ihr mir beim letzten Thema so gut helfen konntet, möchte ich mich gleich wieder bei euch melden.

Ich habe es geschafft, mein bestehendes Beispiel-Projekt ist online und erreichbar.
Leider sieht es nicht so aus, wie es eben aussehen soll.

Logos, Stylesheets, etc. werden nicht berücksichtig / korrekt geladen.
Ich habe einige Sachen gelesen, woran es liegen könnte, weiß aber nicht, was zu tun ist.
Anleitungen sind für mich zum teil unverständlich, veraltet oder sonstiges.

So sieht mein Projekt aktuell aus

Static Files:
/home/user/project/app/static

HTML-Sites:
/home/user/project/app/templates

settings.py:

Code: Alles auswählen

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = posixpath.join(*(BASE_DIR.split(os.path.sep) + ['static']))
layout.html.py:

Code: Alles auswählen

 {% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'content/site.css' %}" />
Vielen Dank an Alle, die etwas beitragen können.
Sirius3
User
Beiträge: 10223
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 11. August 2019, 15:22

Warum machst Du bei ›STATIC_ROOT‹ so ein extrem schlechtes Pfadgewurschtel? posixpfad sollte man nie direkt benutzen müssen, da es über os.path erreichbar ist. str.split bei Pfaden ist auch nicht gerade gut. Und drittens, warum denn erst split um dann wieder join aufzurufen?

Was enthält denn nun `STATIC_ROOT`? Hast Du Dir das mal ausgeben lassen? Oder Dir angeschaut, was in den Server-Logs steht?

Ich kenne Deinen Server nicht, wie der konfiguriert ist, etc. Aber warum gehst Du nicht wie in der Django-Dokumentation beschrieben vor?
Bemme90
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 06:42

Sonntag 11. August 2019, 17:25

Sirius3 hat geschrieben:
Sonntag 11. August 2019, 15:22
Ich kenne Deinen Server nicht, wie der konfiguriert ist, etc. Aber warum gehst Du nicht wie in der Django-Dokumentation beschrieben vor?
Naja, deine Hilfe "Gucke doch in die Dokumentation" ist nicht unbedingt hilfreich.
Das habe ich natürlich gemacht und wie geschrieben verstehe ich dessen Inhalte nicht ganz.

Mein Projekt läuft lokal einwandfrei, jedoch muss man beim Hoster Uberspace besonders mit den Static Files umgehen.
Wie? Weiß ich nicht, auch nach dem ich in die Dokumentation von Uberspace geguckt habe.
Sirius3 hat geschrieben:
Sonntag 11. August 2019, 15:22
Warum machst Du bei ›STATIC_ROOT‹ so ein extrem schlechtes Pfadgewurschtel? posixpfad sollte man nie direkt benutzen müssen, da es über os.path erreichbar ist. str.split bei Pfaden ist auch nicht gerade gut. Und drittens, warum denn erst split um dann wieder join aufzurufen?
Das stammt aus einem leeren Projekt von Microsoft aus Visual Studio 2019 Community.
Es ist also nicht mein extrem schlechtes Pfadgewurschtel.
Auch wenn ich diese Schreibweise auch nicht charmant finde, habe ich es bislang nicht geändert, weil es lokal funktioniert hat.
Sirius3 hat geschrieben:
Sonntag 11. August 2019, 15:22
Was enthält denn nun `STATIC_ROOT`? Hast Du Dir das mal ausgeben lassen? Oder Dir angeschaut, was in den Server-Logs steht?
Muss ich mir erst angucken, wie ich diese anzeigen lassen kann.

P.S.: Deine flapsigen Aussagen sind für einen Anfänger in der Materie nicht gerade aufbauend.
Wenn du augenscheinlich keine Lust hast, so jemanden zu helfen, ignoriere meine Anfragen in Zukunft bitte einfach.
Benutzeravatar
sparrow
User
Beiträge: 1289
Registriert: Freitag 17. April 2009, 10:28

Montag 12. August 2019, 07:51

Bemme90 hat geschrieben:
Sonntag 11. August 2019, 17:25
Mein Projekt läuft lokal einwandfrei, jedoch muss man beim Hoster Uberspace besonders mit den Static Files umgehen. Wie? Weiß ich nicht, auch nach dem ich in die Dokumentation von Uberspace geguckt habe.
Das muss man bei jedem Hoster.
Bemme90 hat geschrieben:
Sonntag 11. August 2019, 17:25
Das stammt aus einem leeren Projekt von Microsoft aus Visual Studio 2019 Community.
Es ist also nicht mein extrem schlechtes Pfadgewurschtel.
Es ist dein extrem schlechtes Pfadgewurschtel, weil du es offensichtlich unhinterfragt verwendest. Wenn deine IDE dir _das_ als Vorlage gibt, dann solltest du in Betracht ziehen, dass deren Qualität - vorsichtig ausgedrückt - nicht so toll ist.

Weißt du denn, was STATIC_ROOT tut? Das kann man in der Dokumentation gut nachlesen. An dem Ort sammelt Django, wenn du collectstatic aufrufst, die statischen Dateien. Aber sie werden durch Django im Produktivbetrieb eben nicht ausgeliefert, sondern durch den Webserver. Und wie man das einrichtet steht in der Dokumentation von Uberspace, die du selbst in deinem anderen Thread mit der "nichts aussagenden Fehlermeldung" verlinkt hast.

Also: Wie ist der Server kofiguriert? Hast du die URL/den Pfad in der Konfiguration von Uberspace angegeben? Liegen die Dateien an der Stelle, nachdem Django sie mit collectstatic kopiert hat? Wohin laufen laut Log die Aufrufe, die die statischen Dateien aufrufen sollten?
Benutzeravatar
snafu
User
Beiträge: 5892
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 12. August 2019, 09:16

Übrigens: BASE_DIR erhält man leichter, wenn man die pathlib-API nutzt:

Code: Alles auswählen

from pathlib import Path

BASE_DIR = Path(__file__).parents[1]
Benutzeravatar
noisefloor
User
Beiträge: 2725
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Montag 12. August 2019, 10:03

Hallo,
Aber sie werden durch Django im Produktivbetrieb eben nicht ausgeliefert, sondern durch den Webserver.
Um das nochmal zu konretisieren: Django "kennt" keine statitischen Dateien, wenn du deine App über WSGI an den Server angebunden hast, sondern generiert "nur" eine URL darauf. Sprich, du musst deinen Webserver so konfigurieren, dass der bei "..../static/...." die Daten liefert. Das hat mit der settings.py nicht direkt was zu tun.

Wenn man sich das sparen will, kannst du zusätzlich WhiteNoise installieren und in Django einbinden. Dann werde die statischen Dateien von Django ausgeliefert, wie auch der Dev-Server von Django das macht. Was IMHO extrem pratisch ist, weil einfach. Die Performance ist auch ok, wenn man nicht gerade tausende von Aufrufen pro Minute hat.

Gruß, noisefloor
Bemme90
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 06:42

Dienstag 13. August 2019, 06:20

In Summe haben eure gesamten Posts mir geholfen mein Problem zu lösen.
Das mit den Static Files habe ich jetzt halbwegs verstanden und die Lösung mit Whitenoise rumprobiert und hinbekommen.

pip install

Code: Alles auswählen

pip3.6 install whitenoise --user
settings.py

Code: Alles auswählen

MIDDLEWARE = [
...
    'whitenoise.middleware.WhiteNoiseMiddleware',
...
]

Code: Alles auswählen

STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
STATIC_ROOT = '/home/<user>/<appname>/app/static'
layout.html.py

Code: Alles auswählen

<link rel="stylesheet" type="text/css" href="{% static 'content/site.css' %}" />
Die absolute Pfadangabe ist sicherlich wieder nicht toll und ein dummes Pfadgewurschtel, aber um die Code-Optimierung geht es hier aktuell noch nicht. Mir ist im Anfänger-Testprojekt erst einmal Funktionsfähigkeit wichtig.
Antworten