2012-04-06 6 views
2

Ich bin von PHP Hintergrund und will Pfad zu STATICFILES_DIRS in settings.py geben und in den Fenstern Ich verstehe, dass ich vollständigen Pfad geben muß wie: D:/path/to/folder/project/static ich wissen will, das ist gibt es eine Möglichkeit, einen Weg wie "/ static /" zu geben oder können wir Pfad wie dirname(__FILE__) in PHP geben?Weg STATICFILES_DIRS in django

So dass mein Pfad nicht fest codiert ist. Auch warum ist physikalischer Pfad als Webserver normalerweise dem physischen Pfad zum Laden von CSS-Dateien nicht folgen, da es HTTP-Pfad verwendet? Warum ist es also (physischer Weg) im Django? Kann jemand bitte erklären.

danke für alle Bemühungen im Voraus.

Antwort

13

In meiner settings.py Dateien, kann ich immer

import os 
ROOT_PATH = os.path.dirname(__file__) 

Dann können Sie

STATICFILES_DIRS = [os.path.join(ROOT_PATH, 'static')] 

Der Grund tun, dass STATICFILES_DIRS ein Dateisystem-Pfad will, ist, dass es, wo die Dateien leben wissen muss im Betriebssystem (so sind Dinge wie manage.py collectstatic möglich). Die STATIC_URL Einstellung ist für Webserver Pfade, und das ist, was es verwendet, um den Benutzer im Admin oder {% static %} Tag oder was auch immer zu zeigen. STATICFILES_DIRS ist nur serverseitig und wird niemals in gerenderten Vorlagen oder anderen Objekten angezeigt.

+0

Also, wenn STATICFILES_DIRS Pfad nicht korrekt ist, dann STATIC_URL wird auch nicht in der Lage sein, den statischen Ordner auf dem Server zu finden? .. – Hafiz

+1

@Hafiz Nicht genau. Wenn 'STATIC_URL''/static' ist und Sie eine Vorlage mit '' haben, dann wird das gut funktionieren (vorausgesetzt, Ihr Webserver ist so eingerichtet, dass er Dinge aus dem statischen Verzeichnis heraus bedient) - das hat nichts zu tun mit 'STATICFILES_DIRS' (oder Django, für diese Angelegenheit). Aber wenn das nicht richtig eingestellt ist, dann können Django-seitige Dinge, die in der Lage sein müssen, die tatsächlichen Dateien zu finden (z. B. 'manage.py collectstatic' oder der' manage.py runserver'-Dev-Server, der Ihre statischen Dateien bereitstellt), nicht funktionieren. – Dougal

+0

danke fürs Detail – Hafiz

1

Antwort auf Ihre Frage ist falsch. Wenn Sie wie dies tun, werden Sie den nächsten Fehler:

 

ImproperlyConfigured: Your STATICFILES_DIRS setting is not a tuple or list; perhaps you forgot a trailing comma? 
 

Meine Entscheidung ist nach oben settings.py Datei die nächste Funktion hinzufügen:

 
import os 

def look_folder_tree(root): 
    result =() 
    for dir_name, sub_dirs, file_names in os.walk(root): 
     for sub_dir_name in sub_dirs: 
      result += (os.path.join(dir_name, sub_dir_name),) 
    return result 

# Django settings for project. 

PROJECT_DIR = os.path.dirname(__file__) 

und rufen look_folder_tree Funktion an :

Meine Entscheidung ist erlaubt, alle Unterordner in statischen Verzeichnis hinzufügen.

+0

Ich werde auch in Ihre Lösung schauen, aber ich habe oben eine korrekt markiert, weil das für mich funktionierte – Hafiz

+0

okay. Deine Wahl =) aber meine Lösung dynamischer. – Rusfearuth

+0

Funktioniert nicht für mich, ich habe: STATICFILES_DIRS = (os.path.join (BASE_DIR, '..', 'statisch'),). Zur gleichen Zeit wird STATIC_ROOT kommentiert und nicht verwendet. Jetzt funktionieren meine statischen Dev-Dateien. Wenn ich den Verwaltungsbefehl "collectstatic" verwende, muss ich STATICFILES_DIRS kommentieren und STATIC_ROOT nicht kommentieren. Es ist selten. – Timo