2016-04-11 21 views
3

Ich möchte eine wiederverwendbare App aus einem benutzerdefinierten Projekt erstellen.Basisvorlage in wiederverwendbarer Django App

Der Teil I eine wiederverwendbare app verschieben möchten dient ganze Seiten und nutzt diese an der Spitze:

{% extends "myproject/base.html" %}

Jetzt bin ich nicht sicher, welche Basisvorlage zu verwenden. In der neuen wiederverwendbaren App möchte ich nicht myproject verwenden, da dies benutzerdefinierter Code ist, den ich nicht teilen kann.

Ich habe versucht, Hilfe von den großen django docs zu bekommen, aber keine Lösung finden konnte - Verzeihen Sie mir, wenn ich

blinder war :-) Was hier in einer wieder verwendbaren App zu schreiben?

{% extends ??????? %}

Antwort

3

Sie müssen die Vorlagen in der App-Ordner speichern.

Angenommen, Sie haben eine Struktur wie myproject/myreusableapp Sie würden einen Vorlagenordner im Ordner myreusableapp anlegen und Ihre base.html Datei dort speichern.

würden Sie dann erweitern Sie die Datei {% extends "myreusableapp/base.html" %}

+0

Ich habe nicht die Verzeichnisstruktur 'myproject/myreusableapp', da ich möchte, dass myreusableapp ein pip-installierbares Python-Paket ist. Aber '{% erweitert 'myreusableapp/base.html"%} 'sieht gut aus. ...... Aber warte. Wie sieht "myreusableapp/base.html" aus? Ich denke, es sollte eine Art "Erweiterung" verwenden, um die Kopf- und Fußzeile des enthaltenen Projekts zu erhalten. – guettli

+0

django-allauth ist ein großartiges Beispiel für ein Paket mit Vorlagen.Vielleicht werfen Sie einen Blick auf diesen Code, um ein echtes Beispiel aus dem 'allauth/templates' -Verzeichnis zu bekommen. https://github.com/pennersr/django-allauth – awwester

+0

danke für den Link. Das Muster ist, dass "myreusableapp/base.html" eine Zeile enthält: '{% extends" base.html "%}'. Siehe https://github.com/pennersr/django-allauth/blob/master/allauth/templates/account/base.html – guettli

2

Leider django gibt es keine offizielle Konvention hier bieten.

Es gibt eine dritte Partei Dokumentation Projekt, das diese Regeln für wiederverwendbare Vorlagen definiert:

https://django-reusable-app-docs.readthedocs.org/en/latest/apps/templates.html

Die Frage einer Konvention in den offiziellen django docs erhalten seit 2012 geöffnet ist:

https://code.djangoproject.com/ticket/19106

Hier ist mein Ticket, das als Duplikat von oben geschlossen wurde:

https://code.djangoproject.com/ticket/26501

... Ich hoffe, dass eine Vereinbarung in der Zukunft gefunden wird.

0

Ich mache es so:

\project 
| 
+-\main 
| | 
| +-\template 
| | | 
| | +-\mainapp 
| | | 
| | +-base.html 
| | +-index.html 
| | +-... 
| | 
| +-\static 
| | 
| +-css 
| +-js 
| +-pics 
| +-... 
| 
+-\otherapp 
    | 
    +-... 

Wo main eine App für Standard-Operationen ist (Pager, Login, ...) und hat die Basis-Templates und statisch in ihm. Beachten Sie, dass Vorlagen in main/templates/main/ gespeichert werden.

In Projekt settings.py, vergessen Sie nicht, main/static in der STATICFILES_DIRS zu registrieren.

Dann können Sie mit {% extends 'main/base.html' %} bereitstellen.

+0

Ich verstehe das so: Wenn Sie "otherapp" in einem anderen Projekt namens "main2" wiederverwenden, dann stellt "main2" seine Basisvorlage als "main/base.html" zur Verfügung. OK, sieht ungefähr so ​​aus wie die Lösung von awwester. Bitte korrigieren Sie mich, wenn mir etwas fehlt. – guettli