Tepat mengikuti tutorial yang ditemukan di sini , saya tidak dapat membuat halaman kesalahan 500 atau 404 kustom. Jika saya mengetikkan url yang buruk, halaman tersebut memberi saya halaman kesalahan default. Apakah ada hal yang harus saya periksa yang akan mencegah halaman kustom muncul?
Direktori file:
mysite/
mysite/
__init__.py
__init__.pyc
settings.py
settings.pyc
urls.py
urls.pyc
wsgi.py
wsgi.pyc
polls/
templates/
admin/
base_site.html
404.html
500.html
polls/
detail.html
index.html
__init__.py
__init__.pyc
admin.py
admin.pyc
models.py
models.pyc
tests.py
urls.py
urls.pyc
view.py
views.pyc
templates/
manage.py
dalam mysite / settings.py Saya telah mengaktifkan ini:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
#....
TEMPLATE_DIRS = (
'C:/Users/Me/Django/mysite/templates',
)
dalam situs saya / polls / urls.py:
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
Saya dapat memposting kode lain yang diperlukan, tetapi apa yang harus saya ubah untuk mendapatkan halaman kesalahan 500 kustom jika saya menggunakan url yang buruk?
Edit
SOLUSI: Saya punya tambahan
TEMPLATE_DIRS
dalam my settings.py dan itu yang menyebabkan masalah
Jawaban:
Di bawah utama Anda,
views.py
tambahkan implementasi kustom Anda sendiri dari dua tampilan berikut, dan cukup siapkan template 404.html dan 500.html dengan apa yang ingin Anda tampilkan.Dengan solusi ini, tidak ada kode khusus yang perlu ditambahkan ke
urls.py
Berikut kodenya:
Memperbarui
handler404
danhandler500
diekspor variabel konfigurasi string Django ditemukan didjango/conf/urls/__init__.py
. Itulah mengapa konfigurasi di atas berfungsi.Untuk membuat konfigurasi di atas bekerja, Anda harus mendefinisikan variabel berikut dalam
urls.py
berkas Anda dan mengarahkan variabel Django yang diekspor ke jalur Python string di mana tampilan fungsional Django ini didefinisikan, seperti:Pembaruan untuk Django 2.0
Tanda tangan untuk tampilan penangan diubah di Django 2.0: https://docs.djangoproject.com/en/2.0/ref/views/#error-views
Jika Anda menggunakan tampilan seperti di atas, handler404 akan gagal dengan pesan:
Dalam kasus seperti itu, ubah pandangan Anda seperti ini:
sumber
500 template
tidak akan merenderrequest.user
karena melaporkan kesalahan server 500, sehingga server tidak dapat menyajikan apa pun.Jawaban resmi:
Berikut ini tautan ke dokumentasi resmi tentang cara mengatur tampilan kesalahan khusus:
https://docs.djangoproject.com/en/stable/topics/http/views/#customizing-error-views
Dikatakan untuk menambahkan baris seperti ini di URLconf Anda (mengaturnya di tempat lain tidak akan berpengaruh):
Anda juga dapat menyesuaikan tampilan kesalahan CSRF dengan mengubah pengaturan
CSRF_FAILURE_VIEW
.Penangan kesalahan default:
Itu layak membaca dokumentasi dari penangan error default,
page_not_found
,server_error
,permission_denied
danbad_request
. Secara default, mereka menggunakan template ini jika mereka dapat menemukan mereka, masing-masing:404.html
,500.html
,403.html
, dan400.html
.Jadi jika yang ingin Anda lakukan hanyalah membuat halaman error yang cantik, cukup buat file-file itu di
TEMPLATE_DIRS
direktori, Anda tidak perlu mengedit URLConf sama sekali. Baca dokumentasi untuk melihat variabel konteks mana yang tersedia.Dalam Django 1.10 dan yang lebih baru, tampilan kesalahan CSRF default menggunakan templat
403_csrf.html
.Kena kau:
Jangan lupa bahwa
DEBUG
harus disetel ke False agar ini berfungsi, jika tidak, penangan debug normal akan digunakan.sumber
Tambahkan baris-baris ini di urls.py
urls.py
dan menerapkan tampilan ubahsuaian kami di views.py.
views.py
sumber
handler400
hanya untuk menimpanyahandler400 = 'myapp.views.bad_request'
?render_to_response
. Dari dokumen: "ini tidak disarankan dan kemungkinan besar akan dihentikan di masa mendatang."render_to_response
yang akan ditinggalkan, lihat berikut ini (gunakanrender
sebagai gantinya): stackoverflow.com/questions/44228397/…Dari halaman yang Anda referensikan:
Jadi saya yakin Anda perlu menambahkan sesuatu seperti ini ke urls.py Anda:
dan serupa untuk handler500.
sumber
urlpatterns = ...
baris Anda , tambahkan baris yang bertuliskanhandler500 = 'views.handle500'
, lalu tambahkan adef handle500(request):
ke views.py Anda yang menampilkan 500.html Anda.Jika yang Anda butuhkan hanyalah menampilkan halaman khusus yang memiliki beberapa pesan kesalahan mewah untuk situs Anda saat itu
DEBUG = False
, maka tambahkan dua templat bernama 404.html dan 500.html di direktori templat Anda dan secara otomatis akan mengambil halaman khusus ini ketika 404 atau 500 dibesarkan.sumber
'DIRS': [os.path.join(BASE_DIR, '<project_name>/templates')]
dalam daftar TEMPLAT Anda disettings.py
.Dalam Django 2. * Anda dapat menggunakan konstruksi ini dalam views.py
Di settings.py
Di urls.py
Biasanya saya membuat default_app dan menangani kesalahan di seluruh situs, prosesor konteks di dalamnya.
sumber
exception
?locals()
? File hanya menunjukkanpass
.settings.py:
dan tambahkan saja Anda
404.html
dan500.html
halaman di folder template. hapus404.html
dan500.html
dari templat di aplikasi jajak pendapat.sumber
raise Http404('msg')
: stackoverflow.com/a/37109914/895245{{ request_path }}
juga tersedia.Buat kesalahan, Pada halaman kesalahan cari tahu dari mana django memuat template. Maksud saya adalah jalur tumpukan. Dalam basis template_dir tambahkan halaman html ini 500.html , 404.html . Jika kesalahan ini terjadi, file template masing-masing akan dimuat secara otomatis.
Anda juga dapat menambahkan halaman untuk kode kesalahan lain, seperti 400 dan 403 .
Semoga bantuan ini !!!
sumber
Di Django
3.x
, jawaban yang diterima tidak akan bekerja karenarender_to_response
telah dihapus seluruhnya serta beberapa perubahan lagi telah dibuat sejak versi jawaban yang diterima bekerja untuk.Beberapa jawaban lain juga ada di sana tetapi saya menyajikan jawaban yang sedikit lebih bersih:
Di
urls.py
file utama Anda :Dalam
yourapp/views.py
file:Pastikan Anda telah mengimpor
render()
dalamyourapp/views.py
file:Catatan tambahan:
render_to_response()
tidak digunakan lagi di Django2.x
dan telah dihapus seluruhnya dalam verisi3.x
.sumber
Sebagai satu baris (untuk 404 halaman generik):
sumber
Ini bekerja pada django 2.0
Pastikan untuk memasukkan kustom Anda
404.html
di dalam folder template aplikasi.sumber
Django 3.0
di sini adalah tautan cara menyesuaikan tampilan kesalahan
berikut adalah link bagaimana membuat view
di
urls.py
(yang utama, di folder proyek), letakkan:dan di app itu (
my_app_name
) letakkan diviews.py
:CATATAN:
error/404.html
adalah jalur jika Anda menempatkan file Anda ke dalam folder template proyek (bukan aplikasi)templates/errors/404.html
jadi harap letakkan file di tempat yang Anda inginkan dan tulis jalur yang benar.CATATAN 2: Setelah halaman dimuat ulang, jika Anda masih melihat template lama, ubah
settings.py
DEBUG=True
, simpan, dan kemudian lagi keFalse
(untuk memulai ulang server dan mengumpulkan file baru).sumber
DEUB=False
file statis Anda mungkin tidak dilayani, sehingga Anda tidak dapat melihat perubahan template kesalahan kustom Anda. Gunakan./manage.py runserver --insecure
untuk memaksa django untuk melayani mereka.Tidak diperlukan tampilan tambahan. https://docs.djangoproject.com/en/3.0/ref/views/
Letakkan saja file kesalahan di root direktori template
Dan itu harus menggunakan halaman kesalahan Anda saat debug adalah False
sumber
Coba pindahkan template kesalahan Anda ke
.../Django/mysite/templates/
?Saya yakin tentang yang satu ini, tetapi saya pikir ini harus "global" ke situs web.
sumber