Apa lokasi terbaik untuk meletakkan template dalam proyek django?
89
Dari buku Django, bab 4 :
Jika Anda tidak dapat memikirkan tempat yang jelas untuk meletakkan cetakan Anda, kami merekomendasikan membuat direktori cetakan dalam proyek Django Anda (yaitu, dalam direktori mysite yang Anda buat di Bab 2, jika Anda telah mengikuti contoh kami).
Inilah yang saya lakukan, dan telah berhasil dengan baik untuk saya.
Struktur direktori saya terlihat seperti ini:
/media
untuk semua CSS / JS / gambar
/templates
saya dll untuk template saya
/projectname
untuk kode proyek utama (yaitu kode Python)
Ditempatkan
<PROJECT>/<APP>/templates/<APP>/template.html
untuk templat khusus aplikasi untuk membantu membuat aplikasi dapat digunakan kembali di tempat lain.Untuk template "global" umum saya memasukkannya
<PROJECT>/templates/template.html
sumber
<APP>
detik masuk<PROJECT>/<APP>/templates/<APP>/template.html
?TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
TEMPLATE_DIRS
sekarang tidak digunakan lagi - Anda sebaiknya menambahkanDIRS=[os.path.join(BASE_DIR, "templates")]
keTEMPLATES
- lihat stackoverflow.com/questions/29725132/…Tindak lanjut dari Dominic dan dlrust,
Kami menggunakan distribusi sumber setuptools (sdist) untuk mengemas proyek dan aplikasi django kami untuk diterapkan di lingkungan kami yang berbeda.
Kami telah menemukan bahwa templat dan berkas statis perlu berada di bawah direktori aplikasi django sehingga bisa dipaketkan oleh setuptools.
Misalnya, template dan jalur statis kami terlihat seperti:
PROJECT/APP/templates/APP/template.html PROJECT/APP/static/APP/my.js
Agar ini bekerja, MANIFEST.in perlu dimodifikasi (lihat http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template )
Contoh dari MANIFEST.in:
include setup.py recursive-include PROJECT *.txt *.html *.js recursive-include PROJECT *.css *.js *.png *.gif *.bmp *.ico *.jpg *.jpeg
Juga, Anda perlu mengkonfirmasi dalam file pengaturan django Anda bahwa pemuat app_directories ada di TEMPLATE_LOADERS Anda. Saya pikir itu ada secara default di django 1.4.
Contoh pemuat template pengaturan django:
# List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', )
Untuk berjaga-jaga jika Anda bertanya-tanya mengapa kami menggunakan sdists daripada hanya menangani file rsync; itu adalah bagian dari alur kerja manajemen konfigurasi kami di mana kami memiliki satu build tarball yang diterapkan dengan PIP tidak berubah menjadi lingkungan pengujian, penerimaan, dan produksi.
sumber
/static/
dalam rencana tata letak Anda saat memikirkan tentang templat dan aplikasi modular. Anda mungkin ingin menyebutkan praktik terbaik lainnya, meletakkancss
file dalam folder yang disebutstatic/app/css
juga untukjs
dan mungkinjpg
atau hanya/static/app/images
.DJANGO 1.11
tambahkan folder template di mana ada manage.py, yang merupakan direktori dasar Anda. ubah DIRS untuk TEMPLATES sebagai berikut di settings.py Anda
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },
]
Sekarang untuk menggunakan template dengan menggunakan kode,
def home(request): return render(request,"index.html",{})
di views.py. ini bekerja dengan baik untuk django 1.11
sumber
Ini lebih merupakan pilihan pribadi di tingkat proyek. Jika Anda berbicara tentang aplikasi yang perlu dicolokkan, maka direktori templat di aplikasi Anda adalah tempat mereka menjadi default. Tapi di seluruh proyek, itulah yang terbaik untuk Anda.
sumber
Saya mengerti
TEMPLATE_DIRS
membutuhkan jalan yang mutlak. Dan saya tidak suka jalur absolut dalam kode saya. Jadi ini bekerja dengan baik untuk saya, disettings.py
:import os TEMPLATE_DIRS = ( os.path.join(os.path.dirname(os.path.realpath(__file__)), "../APPNAME/templates") )
sumber
BASE_DIR
, jadi anda dapat menyederhanakan ini menjadi:os.path.join(BASE_DIR, '../APPNAME/templates')
Django 1.10
TEMPLATE_DIRS
sudah ditinggalkan.Sekarang kita perlu menggunakan
TEMPLATE
, memperkenalkan Django 1.8 seperti ini:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { # ... some options here ... }, }, ]
Tentang lokasi terbaik, Django mencari template seperti ini:
Informasi lebih lanjut: https://docs.djangoproject.com/en/1.10/topics/templates/#configuration
sumber
Solusi sebelumnya tidak berhasil dalam kasus saya. Saya menggunakan:
TEMPLATE_DIRS = [ os.path.join(os.path.dirname(os.path.realpath(__file__)),"../myapp/templates") ]
sumber
TEMPLATE_DIRS
sudah usang sekarang.BASE_DIR
, jadi anda dapat menyederhanakan ini menjadi:os.path.join(BASE_DIR, '../myapp/templates')
Anda juga bisa mempertimbangkan untuk memiliki templat Anda dalam database, menggunakan django-dbtemplates . Ini juga diatur untuk caching, dan aplikasi django-reversion yang membantu Anda menyimpan versi lama dari templat Anda.
Ini berfungsi cukup baik, tetapi saya lebih suka sedikit lebih banyak fleksibilitas pada impor / sinkronisasi ke / dari sisi sistem file.
[sunting: 20 Agustus 2018 - repositori ini tidak tersedia, repositori dengan nama yang sama tersedia di https://github.com/jazzband/django-dbtemplates dan telah diperbarui 8 bulan yang lalu. Saya tidak lagi menggunakan Django dengan cara yang berarti, jadi tidak dapat menjamin ini.]
sumber