Erzählen django zu suchen, app-template-Unterordner
Habe ich die folgende Ordner-Struktur für die templates auf meinem django-app:
templates/
app/
model1/
model1_form.html
model2/
model2_form.html
Angenommen, ich bin mit model1 und eine Allgemeine ListView, jetzt ist es nur die sucht an templates/app/model1_form.html. Gibt es trotzdem kann ich sagen, django sollte er auch auf die Suche nach der app/Unterordner? Ich will nicht zu haben, um die template Namen und den Pfad manuell (template_name="templates/app/model1/model1_form.html"
).
In settings.py ich habe:
import os.path
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
BASE_PATH+'/templates/',
)
Dies ist meine Ansicht:
class HousesListView(ListView):
model = House
context_object_name = "house_list"
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
django.template.loaders.app_directories.Loader
zuTEMPLATE_LOADERS
(wenn es nicht bereits).Dann ändern Sie Ihre Ordner-Struktur, so dass du eine "Vorlagen" - Ordner in das Verzeichnis app:
Oder richtig namespace der Modelle, so dass Sie nicht kollidieren mit anderen app-Namen versehen:
Die anderen Antworten waren richtig, aber für jeden, kommen über diese nun, dies ist, wie das in Django 1.8+
Standardmäßig, Django, sucht nun auch im app-Ordner für Vorlagen. Diese ist gekennzeichnet durch
'APP_DIRS': True,
imTEMPLATES
Einstellung wie diese:Wie die anderen Antworten zeigen, sollten Sie dennoch mit
appname/templates/appname/model1_form.html
zum Namensraum der Vorlagen( mehr info: https://docs.djangoproject.com/en/1.8/intro/tutorial03/#write-views-that-actually-do-something in der box mit dem Titel "template-Verwendung von Namensräumen')
Letzter check: stellen Sie sicher, dass die app, die Sie verwenden ist in der
INSTALLED_APPS
Tupel, wie das war das problem ich hatte.Ich denke, bei der Verwendung von Vorlagen aus den Unterordnern in der Regel müssen Sie entweder:
Manuell geben Sie der Vorlage Weg, als
subdir/template.html
zB. render_to_response('sub/dir/template.html') oder template_name='...'
Definieren alle Unterordner, in die
TEMPLATE_DIRS
zB.
TEMPLATE_DIRS = (
BASE_PATH+'/templates/',
BASE_PATH+'/templates/app',
BASE_PATH+'/templates/app/model1',
)
Aber da Generische Ansichten mit Vorlagen finden sich in app_name/template.html,
Sie bewegen würde, Ihre Vorlagen hinzufügen
/path/to/templates/app/model1
zu Ihrem TEMPLATE_DIRS, und bewegen Sie Ihre Vorlagentemplates/your_app/model/your_app/model_template.html
, das ist etwas umständlich.template_name
ist der einzige Weg. (Es sei denn, Sie tun templates/model1/your_app/model1.html)Mit Django 2.0, es ist nicht einmal notwendig, etwas zu ändern in der
TEMPLATES
variable insettings.py
.Die einzige Anforderung ist das hinzufügen
appname.apps.AppnameConfig
(z.B. Katalog.apps.CatalogConfig für eine app mit dem Namen 'Katalog'), um dieINSTALLED_APPS
Liste, dann django schauen Sie unter appname/templates, bei der Suche nach Vorlagen.