Mesin lokal saya menjalankan Python 2.5 dan Nginx di Ubuntu 8.10, dengan Django dibangun dari trunk pengembangan terbaru.
Untuk setiap URL yang saya minta, ia melempar:
TemplateDoesNotExist di / appname / path appname / template_name.html
Django mencoba memuat template ini, dalam urutan ini: * Menggunakan loader django.template.loaders.filesystem.function: * Menggunakan loader django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)
Apakah ia mencari /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html dalam kasus ini? Yang aneh adalah file ini memang ada di disk. Mengapa Django tidak dapat menemukannya?
Saya menjalankan aplikasi yang sama di server jauh dengan Python 2.6 di Ubuntu 9.04 tanpa masalah seperti itu. Pengaturan lainnya sama.
Apakah ada sesuatu yang salah konfigurasi pada mesin lokal saya, atau apa yang mungkin menyebabkan kesalahan seperti yang harus saya perhatikan?
Di settings.py saya , saya telah menentukan:
SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Itu harus mencari file-file berikut:
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
- ...
Semua file di atas ada di disk.
Terpecahkan
Ini berfungsi sekarang setelah saya mencoba:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
Ini aneh. Saya tidak perlu melakukan ini di server jauh untuk membuatnya bekerja.
Jawaban:
Solusi pertama :
Pengaturan ini
berarti bahwa Django akan melihat template dari
templates/
direktori di bawah proyek Anda.Dengan asumsi proyek Django Anda terletak pada
/usr/lib/python2.5/site-packages/projectname/
saat itu dengan pengaturan Anda Django akan mencari template di bawah/usr/lib/python2.5/site-packages/projectname/templates/
Jadi dalam hal ini kami ingin memindahkan template kami menjadi terstruktur seperti ini:
Solusi kedua :
Jika itu masih tidak berhasil dan dengan asumsi bahwa Anda memiliki aplikasi yang dikonfigurasi di settings.py seperti ini:
Secara default Django akan memuat template di bawah
templates/
direktori di bawah setiap aplikasi yang diinstal. Jadi dengan struktur direktori Anda, kami ingin memindahkan template kami menjadi seperti ini:SETTINGS_PATH
mungkin tidak didefinisikan secara default. Dalam hal ini, Anda ingin mendefinisikannya (di settings.py):sumber
/usr/lib/python2.5/site-packages/projectname/
?templates
bukanlah desain yang baik. Tapi, seperti yang saya tahu, setelah menambahkan AndaAPP_NAME
disettings.py
,django
mungkin pergi untuk mencari templat aplikasi di bawah direktori yang di bawahAPP_DIR
. Dengan demikian, Anda dapat memisahkan templat untuk berbagai aplikasi. (Django 1.7 - .1.9Temukan tuple ini:
Anda perlu menambahkan ke 'DIRS' string
Jadi sama sekali yang Anda butuhkan:
sumber
SETTINGS_PATH
sebenarnya tidak didefinisikan di mana pun, jadi saya tidak berpikir bahwa jawaban ini akan berfungsi. Mungkin maksud AndaBASE_DIR
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
, bukan fileJika Anda mengalami masalah ini saat Anda menambahkan
app
dari awal. Mungkin karena Anda melewatkan beberapasettings
. Tiga langkah diperlukan saat menambahkanapp
.1 、 Buat direktori dan file templat.
Misalkan Anda memiliki proyek bernama
mysite
dan Anda ingin menambahkanapp
namayour_app_name
. Letakkan file template Anda di bawahmysite/your_app_name/templates/your_app_name
sebagai berikut.2 、 Tambahkan
app
keINSTALLED_APPS
.Memodifikasi
settings.py
3 、 Tambahkan
app
direktori Anda keDIRS
dalamTEMPLATES
.Ubah
settings.py
.sumber
Dalam pengaturan .py hapus TEMPLATE_LOADERS dan TEMPLATE DIRS Lalu ADD
sumber
Saya memiliki masalah yang memalukan ...
Saya mendapatkan kesalahan ini karena saya terburu-buru dan lupa memasukkan aplikasi
INSTALLED_APPS
. Anda akan berpikir Django akan meningkatkan kesalahan yang lebih deskriptif.sumber
Hanya firasat, tetapi periksa artikel ini tentang memuat template Django . Secara khusus, pastikan Anda memiliki
django.template.loaders.app_directories.Loader
daftar TEMPLATE_LOADERS Anda.sumber
Periksa izin pada templat dan direktori appname, baik dengan ls -l atau coba lakukan path absolut terbuka () dari Django.
sumber
Ini berfungsi sekarang setelah saya mencoba
Ini aneh. Saya tidak perlu melakukan ini di server jauh untuk membuatnya bekerja.
Juga, saya harus menjalankan perintah berikut pada mesin lokal untuk membuat semua file statis dapat diakses tetapi pada server jauh mereka semua "root: root".
Mesin lokal berjalan pada edisi desktop Ubuntu 8.04. Server jarak jauh ada pada edisi server Ubuntu 9.04.
Adakah yang tahu mengapa?
sumber
Untuk versi Django 1.9, saya menambahkan
baris ke blok Templates di settings.py Dan itu bekerja dengan baik
sumber
TemplateDoesNotExist
Kesalahan Django berarti bahwa kerangka kerja tidak dapat menemukan file templat.Untuk menggunakan API pemuatan templat, Anda harus memberi tahu kerangka kerja tempat Anda menyimpan templat. Tempat untuk melakukan ini ada di file pengaturan Anda (
settings.py
) olehTEMPLATE_DIRS
pengaturan. Secara default ini adalah tuple kosong, jadi pengaturan ini memberi tahu mekanisme memuat template Django ke mana harus mencari templat.Pilih direktori tempat Anda ingin menyimpan template Anda dan menambahkannya ke TEMPLATE_DIRS misalnya:
sumber
Lihat folder mana Django mencoba memuat tampilan template
Template-loader postmortem
di halaman kesalahan, misalnya, kesalahan akan terlihat seperti ini:Dalam kesalahan saya
vcsrc\vcsrc\templates\base.html
tidak ada di jalur.Kemudian ubah
TEMPLATES
disetting.py
file path template Andasumber
Saya harus menggunakan templat untuk aplikasi internal dan berfungsi untuk saya:
sumber
Pastikan Anda telah menambahkan aplikasi ke
project-name/app-namme/settings.py
INSTALLED_APPS: .Dan pada
project-name/app-namme/settings.py
TEMPLATES: .sumber
Periksa apakah templates.html Anda dalam
/usr/lib/python2.5/site-packages/projectname/templates
direktori.sumber
Hai teman-teman, saya menemukan solusi baru. Sebenarnya itu didefinisikan dalam template lain jadi alih-alih mendefinisikan TEMPLATE_DIRS sendiri, letakkan nama path direktori Anda di:
sumber
Saya malu mengakui hal ini, tetapi masalahnya bagi saya adalah bahwa templat telah ditentukan sebagai
….hml
ganti….html
. Awas!sumber
Saya menambahkan ini
dan masih menunjukkan kesalahan, maka saya menyadari bahwa di proyek lain template ditampilkan tanpa menambahkan kode itu dalam file settings.py jadi saya memeriksa proyek itu dan saya menyadari bahwa saya tidak membuat lingkungan virtual dalam proyek ini jadi saya melakukannya
dan itu berhasil, tidak tahu mengapa
sumber
Saya datang dengan masalah ini. Inilah cara saya memecahkan ini:
Lihatlah pengaturan Anda .py, cari
TEMPLATES
variabel, di dalam TEMPLATES, tambahkan path template Anda di dalamDIRS
daftar. Bagi saya, pertama-tama saya menetapkan jalur templat saya sebagaiTEMPLATES_PATH = os.path.join(BASE_DIR,'templates')
, lalu menambahkanTEMPLATES_PATH
keDIRS
daftar'DIRS':[TEMPLATES_PATH,]
,. Kemudian restart server, pengecualian TemplateDoesNotExist hilang. Itu dia.sumber
di
setting.py
file Anda gantiDIRS
dalamTEMPLATES
array dengan iniuntuk ini
tetapi saya pikir Anda perlu tahu adalah bahwa Anda harus membuat folder dengan nama
templates
dan itu harus di jalur root jika tidak, Anda harus mengubahDIRS
nilaisumber
1. buat folder 'templat' di 'aplikasi' Anda (katakanlah Anda memberi nama aplikasi seperti itu) dan Anda dapat meletakkan file html di sini. Tetapi sangat disarankan untuk membuat folder dengan nama yang sama ('app') di folder 'templates' dan hanya kemudian meletakkan html di sana. Ke dalam folder 'app / templates / app'
2. sekarang di urls.py 'app' menempatkan:
3. di put 'app''s views.py:
sumber