ubuntuusers.de

Python/Django: Static files

Status: Gelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

borsTiHD

Anmeldungsdatum:
6. Februar 2017

Beiträge: Zähle...

Hallo zusammen,

ich hoffe ihr könnt mir helfen und zwar bin ich recht frisch in die Python Programmierung eingestiegen. Als Framework nutze ich Django. Macht mir schonmal sehr viel spaß.

Meine erste kleine App mithilfe eines kleinen Tutorials habe ich schon geschrieben und konnte es nutzen. Jetzt wollte ich mein eigenes Projekt schreiben.

Dabei bin ich auf ein für mich großes Problem gestoßen. Ich würde gerne ein fertiges Template/Frontend nutzen (in diesem Fall AdminLTE). Im prinzip wird aus dem Template alles geladen, außer die "Verlinkung" zu den einzelnen CSS Dateien, die sich in der gleichen Ordnerstruktur befinden.

In der index.html die geladen wird steht folgendes:

1
<link rel="stylesheet" href="dist/css/AdminLTE.min.css">

Meine eigentliche Frage, was muss ich machen damit diese Dateien auch gefunden werden?

In meiner Tutorial App habe ich mithilfe von Static Files gearbeitet und habe dort meine CSS Datei in einen "abgegrenzten" Ordner reinkopiert. Doch mal abgesehen davon das ich das nicht gerne möchte, wäre es sehr aufwendig alle verlinkten Dateien aus AdminLTE hierfür umzuschreiben. Ich mag das Prinzip des "getrennten" Ordners für das gesamte Template sehr, deswegen würde ich es auch gerne belassen.

Meine Ordnerstruktur:

1
2
3
4
5
6
7
/home/borstihd/mysite/manage.py
/home/borstihd/mysite/mysite/settings.py

/home/borstihd/mysite/blackboard/apps.py

/home/borstihd/mysite/blackboard/templates/blackboard/index.html
/home/borstihd/mysite/blackboard/templates/blackboard/dist/css/AdminLTE.min.css

Vielen Dank schon mal im Vorraus. ☺ Gesucht hab ich übrigens schon, aber finde nichts passendes, bzw komme mit den Static Files parametern nicht zurecht (ich denke mal die sind die Lösung?)

lg borsTiHD

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Ich würde gerne ein fertiges Template/Frontend nutzen (in diesem Fall AdminLTE)

Ist das ein fertige Django-Modul? Wenn ja, hast du mal den Link zum Projekt.

Grundsätzlich kann Django mit static files in verschiedenen Ordnern umgehen. In der settings.py kannst dem Schlüssel "STATICFILES_DIRS" eine Liste der Pfade mitgeben (Link zu Doku 🇬🇧]).

Gruß, noisefloor

borsTiHD

(Themenstarter)

Anmeldungsdatum:
6. Februar 2017

Beiträge: 4

Hi ☺

erstmal vielen Dank für die fixe Antwort. Ich nutze ein Frontend das auf Bootstraps aufbaut: https://almsaeedstudio.com/themes/AdminLTE/index2.html Ist erstmal kein Modul für Django, sondern prinzipiell erstmal nur ein einfaches Template.

Hier ist wohl auch der Haken, da die ganzen Javascripte, CSS und sonstige Bibliotheken entwerder über das Web, oder aus dem gleichen Ordnerverzeichnis nachgeladen werden wollen.

Da es doch viele sind und ich auch keine Inkomapitiblitäten haben möchte, hätte ich die Einbindung der zu importierenden Daten gerne belassen. Diese greifen halt leider über den relativen Pfad (ala "href="dist/css/AdminLTE.min.css") zu.

Wenn ich die über den Static Ordner, den Django gerne benutzen möchte gehen will, müsste ich alles was AdminLTE einbinden möchte anpassen.

Ich will nicht abstreiten das Django das aus bestimmten Gründen so macht und gerne hätte, aber wegen eventuell zuvielen Abhängigkeiten hätte ich das (vor allem als Anfänger) gerne so wie es bereits funktionieren könnte. 😀 Die Pfade sind ja bereits angegeben, doch findet Django die Datei unter beispielsweise "href="dist/css/AdminLTE.min.css" nicht.

Danke dir für den Doku Link. Bin derzeit noch auf der Arbeit, werde es mir morgen früh mal genauer anschauen und rumprobieren. ☺ Wenn ich Django dazu zwingen könnte, den Pfad zu meinem Template Ordner zu nutzen, wäre ich wohl schon glücklich. 😀

lg

borsTiHD

(Themenstarter)

Anmeldungsdatum:
6. Februar 2017

Beiträge: 4

Danke dir nochmal, hat aber leider nicht so geklappt wie erhofft. ☹

Ich hab folgende Einstellungen probiert:

1
2
3
4
STATICFILES_DIRS = (
    "/home/borstihd/mysite/blackboard/templates/blackboard",
    "/home/borstihd/mysite/blackboard/",
)

€dit: Hm.. ich habs irgendwie geschafft. Leider nicht ganz so faul wie ich es gerne gehabt hätte, aber es läuft. 😀

1
2
3
4
5
6
7
8
settings.py

STATICFILES_DIRS = (
    "/home/borstihd/mysite/blackboard/templates/blackboard",
    "/home/borstihd/mysite/blackboard/",
)

STATIC_URL = '/home/borstihd/mysite/blackboard/templates/blackboard/'
1
2
3
4
5
6
index.html

{% load static %}
{% load static from staticfiles %}

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

Möglich das ich jetzt etwas zu viel drin hab, aber da es so funktioniert belasse ich es erstmal. Auf weitere Probleme werde ich ja noch früh genug stoßen. 😀

Danke nochmal. ☺

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

schön, dass es funktioniert ☺

Hier ist wohl auch der Haken, da die ganzen Javascripte, CSS und sonstige Bibliotheken entwerder über das Web, oder aus dem gleichen Ordnerverzeichnis nachgeladen werden wollen. Die Pfade sind ja bereits angegeben, doch findet Django die Datei unter beispielsweise "href="dist/css/AdminLTE.min.css" nicht.

Genau das ist der Haken. Django kennt ja "nur" die URLs, die du in der urls.py definiert hast und die, die in der settings.py über static_files etc. definiert sind. Alles andere er(-kennt) Django nicht.

hätte ich die Einbindung der zu importierenden Daten gerne belassen.

Plan B wäre gewesen, die Dateien über einen Webserver unabhängig von Django liefern zu lassen. Was nach dem Deploy in die Produktivumgebung ja so wie so der Fall ist, zum Entwickeln aber IMHO stark suboptimal / unpraktisch.

Gruß, noisefloor

borsTiHD

(Themenstarter)

Anmeldungsdatum:
6. Februar 2017

Beiträge: 4

Hm, ja da gebe ich dir recht.

Mal schauen was ich da mache, sobald es in die Produktivumgebung kommt. :'D

Soweit hab ich mich mit Python/Django noch nicht auseinandergesetzt.

Antworten |