2012-08-03 8 views
15

Ich habe versucht, benutzerdefinierte Vorlagen für die Admin-Seite für Django arbeiten zu bekommen, aber waren nicht erfolgreich. Ich habe die Django-Dokumentation und mehrere Blogs gelesen, die erklären, dass es sich um einen so leichten Schritt handelt, von dem ich annahm, dass er es war.Benutzerdefinierte Django-Admin-Vorlagen funktionieren nicht

Ab sofort funktioniert die Admin-Seite aber meine eigene Neuschreibung der CSS oder Vorlagen funktioniert nicht. Mein Setup ist als

/project_folder/ 
     manage.py 
     settings.py 
     urls.py 
     __init__.py 
     /app/ 
      views.py 
      models.py 
      __init__.py 
      /templates/ 
       /admin/ 
        base_site.html 

Im urls.py folgt Ich habe

(r'^admin/', include(admin.site.urls)), 

Welche funktioniert, da ich nicht usw. Also anmelden kann ich die /admin/base_site.html gehe davon würde die Standard überschrieben aber es macht nichts.

Wer weiß, was hier vor sich geht? Ich folgte ihm von den Django Tutorials/Guides und ging auf einige Blogs, um zu sehen, ob sie Antworten hatten, aber sie alle sagten dasselbe.

Edit 1: Ich habe meine Vorlagen Verzeichnis-Setup korrekt.

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates/'), 
) 

Das funktioniert richtig, wie ich den Rest meiner Seite habe die Zusammenarbeit mit einem Medienverzeichnis für CSS usw. Das einzige, was nicht scheinbar ‚akzeptieren‘ die Vorlagen ist der Admin-Bereich.

+2

Aber das scheint nicht der richtige Vorlagenpfad zu sein. Sie haben ein Projekt/Templates, aber Ihre Struktur zeigt es als Projekt/App/Templates. –

Antwort

24

Alles klar, ich habe es behoben, das war ein blöder Fehler, aber ich spielte schon seit 2 Stunden damit. Ich musste meine App vor django.contrib.admin deklarieren. Es würde es sonst nicht akzeptieren.

+2

Nur FYI Ich gehe jetzt mit Django 1.6.5 durch das Tutorial und musste das nicht tun, damit es funktioniert. – liquidki

+2

Freut mich zu sehen, dass ich nicht die einzige bin, die dieses Problem hat (klar, es gibt mindestens 15 andere). Mit Django 1.10 sagen die Dokumente Dinge wie _wenn Sie den Loader anpassen, Ihre Verzeichnisreihenfolge ändern - aber nichts über die Apps selbst. –

4

Stellen Sie sicher, dass Sie TEMPLATE_DIRS in in den richtigen Ordner gesetzt haben!

+0

habe ich, zu meinem Hauptbeitrag aber trotzdem guten Tipp hinzugefügt. – Yonathan

+1

Ich habe mein Problem gefunden, indem ich die Standardvorlage (Umbenennung in base_site.htmlx) gebrochen habe und die Fehlerseite zeigte, dass ich den Vorlagenordner am falschen Ort hatte. – ed209

6

Ich konnte nicht die Admin-Vorlage, um zu erkennen, wenn this step in Teil zwei der Django-Tutorial zu tun.

Dies ist, wie ich es gelöst:

die Informationen in this answer verwenden, gedruckt ich den Wert von TEMPLATE_DIRS:

  1. in der Befehlszeile in das Verzeichnis navigieren, in dem das settings.py-Datei des Projektes besteht (für mich ist R:\jeffy\programming\sandbox\python\django\tutorial\mysite\mysite\)
  2. Starten Sie die interaktive Shell: python
  3. >>> import settings
  4. >>> settings.TEMPLATE_DIRS, die ['R:\\jeffy\\programming\\sandbox\\python\\django\\tutorial\\mysite\\templates']

gibt also ist die erwartete Position des Vorlagenverzeichnis für dieses Projekt. Das Admin-Verzeichnis geht darauf ein, und die base_site.html-Datei geht darauf ein.

Das andere Problem, das ich hatte, war, dass es Arbeits war, aber ich änderte nur die <TITLE> Feld, so habe ich es nur nicht bemerkt. (Ich dachte, ich würde die Haupt-Header ändern.)

+1

"Das Admin-Verzeichnis geht in das" <- Dies. Einfach zu übersehen. Ich legte die Dateien direkt in Vorlagen und konnte nicht herausfinden, warum es nicht funktionierte ... – mmdanziger

+0

Ich nannte auch die oberste Ebene Verzeichnis "mysite" sowie meine App-Verzeichnis "mysite", also, wenn ich TEMPLATE_DIRS und es gedruckt gab ''/Users/username/dev/code/mysite/templates'', ich las zu schnell und dachte, ich hätte es richtig gemacht, aber ich war nicht wie ich in '.../ code/mysite/mysite/templates' – liquidki

+1

Eine Randnotiz, 'import settings' funktionierte nicht für mich, aber' mysite import settings' tat es. – jeff

17

Ein weiterer Fehler, den man sich bei dieser Übung zu widersetzen sollte. Die Übung sagt, dies zu ändern ...

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Django administration') }} </a></h1> 

dazu ...

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1> 

Es ist eine Versuchung, nur die String-Konstante zu ändern, aber das ist falsch. I.e. dies nicht tut, wird es nicht die Überschrift ändern:

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Polls Administration') }} </a></h1> 

, dass der Fehler war ich gemacht, und ich hatte durch die Übung gehen sorgfältig, es zu beheben.

+0

Das müssen wir in der Datei 'Projects/mysite/templates/admin/base_site.html' machen, oder? – jeff

+1

@halilpazarlama ja, wenn Sie das Tutorial auf https://docs.djangoproject.com/en/1.7/intro/tutorial02/ – Rooster

3

Ich hatte das gleiche Problem beim Laufen durch das Django 1.6.5 Tutorial (https://docs.djangoproject.com/en/1.8/intro/tutorial02/), erkannte aber, dass es ein Fehler war, nicht sorgfältig zu lesen. Das Tutorial hat Sie tun, ist diese setzen in Ihre settings.py:

TEMPLATES = [ 
    { 
     ... 
    'DIRS': [os.path.join(BASE_DIR, 'templates')], 
     ... 
    } 

ich dann den Ordner Vorlagen habe ich Überschreibung für die Admin-Seite unter der App genau wie Ihr Beispiel setzen wollte:

/project_folder/ 
     manage.py 
     settings.py 
     urls.py 
     __init__.py 
     /app/ 
      views.py 
      models.py 
      __init__.py 
      /templates/ 
       /admin/ 
        base_site.html 

Mit diesem würde es nicht funktionieren aus dem gleichen Grund wie das Problem, das Sie von Daniel Roseman in einem der Kommentare bemerkt hatten, mein DIR bewertete zu project_folder/templates (wie ich es erzählte). Dann bemerkte ich im Tutorial die es explizit die templates/admin Ordner auf Projektebene setzen, nicht auf die App-Ebene:

erstellen Vorlagen Verzeichnis in Ihrem Projektverzeichnis (derjenige, den manage.py enthält). Vorlagen können überall in Ihrem Dateisystem existieren, auf das Django zugreifen kann. (Django wird als beliebiger Benutzer ausgeführt, den Ihr Server ausführt.) Es ist jedoch eine gute Konvention, Ihre Vorlagen innerhalb des Projekts zu behalten.

Auf diese Weise hatte ich die folgende Struktur:

/project_folder/ 
     manage.py 
     settings.py 
     urls.py 
     __init__.py 
     /templates/ 
      /admin/ 
       base_site.html 
     /app/ 
      views.py 
      models.py 
      __init__.py 

Damit das alles wie erwartet funktioniert (ich konnte die Standard django Vorlagen für die Admin-Seiten überschreiben).

Während Sie in der Lage sein sollten, Vorlagen überall zu platzieren und Django zu konfigurieren, scheint es sinnvoll, Ihre wichtigsten Admin-Vorlagen auf Projektebene zu legen, da die Admin-Site nicht für die App, sondern für das gesamte Projekt verfügbar ist .

+0

folgen kann ich bestätigen, ich hatte das gleiche Problem und vergaß, in den Einstellungen hinzuzufügen.DIRS den Pfad für die Vorlagen location.I hatte Schwierigkeiten, herauszufinden, weil in einem anderen Projekt (aber mit Django 1.9) der Pfad eingestellt war und immer noch nicht funktioniert, in diesem Fall war, weil {{site_header | default: _ ('Content Manager Interface')}} mit einem einfachen Text ersetzt werden. –

Verwandte Themen