Saya membangun aplikasi menggunakan Django sebagai pekerja keras saya. Semua telah diatur dengan baik sejauh pengaturan db, dikonfigurasi direktori statis, url, pandangan dll. Tapi masalah mulai menyelinap pada saat saya ingin membuat halaman 404.html dan 500.html indah dan kustom saya sendiri.
Saya membaca dokumen tentang penanganan kesalahan khusus, dan mengatur konfigurasi yang diperlukan di UrlsConf, membuat tampilan yang sesuai dan menambahkan 404.html dan 500.html ke direktori templat aplikasi saya (ditentukan dalam pengaturan.py juga).
Tetapi dokumen mengatakan you can actually view custom error views until Debug is Off
, jadi saya mematikannya untuk menguji barang-barang saya, dan saat itulah hal mengamuk!
Saya tidak hanya gagal melihat custom 404.html (sebenarnya, ia memuat, tetapi karena masing-masing halaman kesalahan saya berisi pesan kesalahan grafis -sebagai gambar yang bagus), sumber halaman kesalahan dimuat, tetapi tidak ada yang lain dimuat! Bahkan tidak menautkan CSS atau Javascript!
Secara umum, setelah saya atur DEBUG = False
, semua tampilan akan dimuat, tetapi konten yang tertaut (CSS, Javascript, Gambar, dll) tidak akan dimuat! Apa yang terjadi? Apakah ada sesuatu yang hilang, mengenai file statis dan DEBUG
pengaturannya?
sumber
Jawaban:
Dengan debug dimatikan, Django tidak akan lagi menangani file statis - server web produksi Anda (Apache atau yang lain) harus mengatasi hal itu.
sumber
Jika Anda masih perlu server statis secara lokal (misalnya untuk pengujian tanpa debug) Anda dapat menjalankan devserver dalam mode tidak aman:
sumber
Anda dapat menggunakan WhiteNoise untuk menyajikan file statis dalam produksi.
Install:
Dan ubah file wsgi.py Anda menjadi ini:
Dan Anda baik untuk pergi!
Kredit ke Blog Kreatif Stang .
TETAPI benar-benar tidak disarankan menyajikan file statis dengan cara ini dalam produksi. Server web produksi Anda (seperti nginx) harus mengatasinya.
sumber
wgsi.py
file. Dokumentasi yang Anda tautkan tampaknya memberikan instruksi lain untuk menggunakan WhiteNoise. Akan mencoba cara lain dan memperbarui Anda di sini.manage.py runserver --insecure
tidak bekerja untuk saya. Yang ini, sih.'whitenoise.middleware.WhiteNoiseMiddleware'
ke middleware. Lihat catatan rilis dari changelogDi urls.py saya menambahkan baris ini:
tambahkan kedua url tersebut di urlpatterns:
dan kedua file statis dan media dapat diakses ketika DEBUG = SALAH.
Semoga bermanfaat :)
sumber
url(
denganre_path(
Jika Anda menggunakan tampilan servis statis dalam pengembangan, Anda harus memiliki DEBUG = True:
Documents: menyajikan file statis dalam pengembangan
EDIT: Anda bisa menambahkan beberapa url hanya untuk menguji 404 dan 500 templat Anda, cukup gunakan generik view direct_to_template di url Anda.
sumber
Jawaban Johnny bagus, tetapi tetap tidak berhasil bagi saya hanya dengan menambahkan baris-baris yang dijelaskan di sana. Berdasarkan jawaban itu, langkah-langkah yang benar-benar bekerja untuk saya di mana:
Instal WhiteNoise seperti yang dijelaskan:
Buat
STATIC_ROOT
variabel dan tambahkan WhiteNoise keMIDDLEWARE
variabel Anda disettings.py
:Kemudian, modifikasi
wsgi.py
file Anda seperti dijelaskan dalam jawaban Johnny:Setelah itu, sebarkan perubahan Anda ke server Anda (dengan git atau apa pun yang Anda gunakan).
Akhirnya, jalankan
collectstatic
opsi dari Andamanage.py
di server Anda. Ini akan menyalin semua file dari folder statis Anda keSTATIC_ROOT
direktori yang kami tentukan sebelumnya:Anda sekarang akan melihat folder baru bernama
staticfiles
yang mengandung elemen tersebut.Setelah mengikuti langkah-langkah ini Anda sekarang dapat menjalankan server Anda dan akan dapat melihat file statis Anda saat dalam mode Produksi.
Pembaruan: Jika Anda memiliki versi <4 changelog menunjukkan bahwa tidak perlu lagi mendeklarasikan
WSGI_APPLICATION = 'projectName.wsgi.application'
padasettings.py
file Anda .sumber
Anda sebenarnya dapat menyajikan file statis dalam aplikasi Django produksi, dengan aman dan tanpa
DEBUG=True
.Daripada menggunakan Django sendiri, gunakan dj_static di file WSGI Anda ( github ):
sumber
Cukup buka urls.py proyek Anda, lalu temukan pernyataan if ini.
Anda dapat mengubah pengaturan. MENGUNDANG di True dan itu akan selalu berfungsi. Tetapi jika proyek Anda adalah sesuatu yang serius maka Anda harus memikirkan solusi lain yang disebutkan di atas.
Dalam Django 1.10 Anda dapat menulis demikian:
sumber
Anda dapat men-debug ini dengan berbagai cara. Inilah pendekatan saya.
localsettings.py:
urls.py:
Pastikan untuk membaca dokumen;)
https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true
sumber
Dukungan untuk argumen tampilan string ke url () sudah usang dan akan dihapus di Django 1.10
Solusi saya hanyalah koreksi kecil untuk solusi Conrado di atas.
sumber
Meskipun tidak teraman, tetapi Anda dapat mengubah kode sumbernya. navigasi ke
Python/2.7/site-packages/django/conf/urls/static.py
Kemudian edit seperti berikut:
Jadi jika
settings.debug==False
itu tidak akan berpengaruh pada kode, juga setelah menjalankan cobapython manage.py runserver --runserver
jalankan file statis.CATATAN : Informasi hanya boleh digunakan untuk pengujian saja
sumber
Saya melakukan perubahan berikut pada proyek / urls.py saya dan itu berhasil untuk saya
Tambahkan baris ini: dari django.conf.urls impor url
dan tambahkan: url (r '^ media / (? P. *) $', sajikan, {'document_root': settings.MEDIA_ROOT,}), dalam urlpatterns.
sumber