2012-11-29 6 views
21

Von django 1.5 ab, https://docs.djangoproject.com/en/1.5/releases/1.5/#miscellaneousgeeignete Weise veraltet `adminmedia` TemplateTag zu handhaben und {% admin_media_prefix%}

Die Template-Tags Bibliothek adminmedia, die nur enthielt die veraltet Template-Tag {% admin_media_prefix%}, wurde entfernt. Der Versuch, es mit {% load adminmedia%} zu laden, schlägt fehl. Wenn Ihre Vorlagen immer noch diese Zeile enthalten, müssen Sie sie entfernen.

Was ist also der geeignete Weg, um Code ersetzen in Legacy-Bibliotheken und mein Vermächtnis Projekte gefunden, die noch {% load adminmedia %} verwendet und lädt css wie: -

<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/login.css"> 

?

Antwort

22

Seit Django 1.3 können Sie django.contrib.staticfiles App verwenden.

Stellen Sie sicher, dass django.contrib.staticfiles in Ihrem INSTALLED_APPS und die STATIC_ROOT und STATIC_URL Optionen angegeben werden in Ihrem settings.py enthalten ist.

Dann führen Sie manage.py collectstatic Befehl und statische Dateien aller Anwendungen werden im STATIC_ROOT-Ordner gesammelt.

In den Vorlagen können Sie das {{ STATIC_URL }} Kontextvariable verwenden (stellen Sie sicher, dass django.core.context_processors.static in TEMPLATE_CONTEXT_PROCESSORS enthalten ist) oder den {% static %} Template-Tag.

<link href="{{ STATIC_URL }}admin/css/login.css" rel="stylesheet"> 

oder

{% load staticfiles %} 
<link href="{% static 'admin/css/login.css' %}" rel="stylesheet"> 
+0

ich über die Dokumentation für STATIC_PATH suchen und kann nichts sehen, dass STATIC_ROOT sein sollte? –

+0

@wobbily_col Sie haben recht bei STATIC_ROOT, ich habe eine Bearbeitung für diese Antwort eingereicht (wartet auf einen Peer-Review). –

+0

Ist das Ziehen dieser Dateien in Ihr eigenes Projekt wirklich die empfohlene Lösung? Es klingt wie ein Hack. – knipknap

4

ich nur kopiert, was in base.css ist:

{% load admin_static %} 

und dann

<link href="{% static 'admin/css/base.css' %}" rel="stylesheet"> 

(ersetzen base.css mit dem, was Sie benötigen, wie login.css in Ihrem Fall)

Stellen Sie sicher, dass Sie django.contrib.staticfiles in Ihrem INSTALLED_APPS haben.

(Ich brauchte nicht STATIC_ROOT zu konfigurieren und manage.py collectstatic wie zuvor vorgeschlagen, durch Anton laufen)

Verwandte Themen