Verwalten von statischen Dateien für mehrere apps in Django
Ich bin die Entwicklung einer Django (1.3) Projekt aus vielen Anwendungen. Jede Anwendung hat Ihre eigene statische Dateien unter eigene static
- Verzeichnis. Außerdem habe ich ein Verzeichnis namens project_static
enthalten statische Dateien, die Häufig während der verschiedenen Anwendungen, wie z.B. jQuery.
Das problem, das ich sofort in ausgeführt wird, dass der Namenskonflikte. Standardmäßig collectstatic
werden einfach alles unter einem globalen static
Verzeichnis, ohne Sie zu klassifizieren, die durch Anwendung. Dies funktioniert bei mir nicht, da jede Anwendung hat zum Beispiel eine Datei namens css/screen.css
.
Die Art, wie ich es gelöst ist durch das entfernen django.contrib.staticfiles.finders.AppDirectoriesFinder
aus STATICFILES_FINDERS
und mit Namespace-statische Dateien dirs, so sind meine Einstellungen jetzt wie folgt Aussehen:
STATICFILES_DIRS = (
os.path.join(PROJECT_PATH, 'project_static'),
('my_app', os.path.join(PROJECT_PATH, 'my_app', 'static')),
('another_app', os.path.join(PROJECT_PATH, 'another_app', 'static')),
...
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
)
Das problem ist, dass ich auf diese Weise verlieren die statischen Dateien für alle anderen Anwendungen (z.B. django.contrib.admin
). Natürlich könnte ich das manuell hinzufügen der admin, aber ich bin mir nicht sicher, wie dies zu tun, ohne zu brechen, den admin, der hat eine andere Verzeichnis-Struktur.
Gibt es eine bessere Möglichkeit zur Verwaltung der statischen Dateien mit mehr als einer Anwendung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist das gleiche problem bei der Verwendung von app-spezifischen
templates
Verzeichnisse. Wenn Sie nur werfen Sie die Dateien direkt untertemplates
in der app, werden Sie am Ende mit Kollisionen mit Namen, die, wenn zwei apps oder sogar die Projekt-Ebenetemplates
Verzeichnis nutzen Sie Vorlagen mit dem gleichen Namen. Der fix dafür ist, dass tatsächlich die Vorlagen in ein Verzeichnis mit den Namen der app innerhalb dertemplates
Verzeichnis wie:So, ich Wende die gleiche Idee auf statische:
So, wenn Sie laufen collectstatic, jede einzelne app statische Dateien in einem Namespace-Verzeichnis. Die einzige änderung, die Sie vornehmen müssen, Präfix jede der Dateien, die mit dem app-Namen-Verzeichnis in Ihren Vorlagen. Also anstatt
{{ STATIC_URL }}css/style.css
Sie haben{{ STATIC_URL }}my_app/css/style.css
.