Có một cách khác. Mã số tại page_not_found
sử dụng RequestContext
; điều đó có nghĩa là bạn có quyền truy cập vào tất cả các biến được xác định bởi tất cả các bộ xử lý ngữ cảnh được xác định trong mục nhập TEMPLATE_CONTEXT_PROCESSORS
trong settings.py
. Giá trị mặc định bao gồm, trong số những người khác, django tin nhắn khuôn khổ.
Vì vậy, bạn xác định thư bạn muốn hiển thị bằng cách sử dụng messages.error
, ví dụ và hiển thị thông báo trong mẫu bằng biến số messages
.
Nói cách khác, bạn có thể viết cái nhìn của bạn như thế này:
from django.contrib import messages
from django.http import Http404
from django.template import RequestContext
def my_view(request):
# your code goes here
if something_horribly_wrong_happened():
messages.error(request, 'Somethig horribly wrong happened!')
raise Http404("It doesn't mind whatever you put here")
else:
return render_to_response(
'template.html',
RequestContext(request, locals()),
)
Trong mẫu 404.html của bạn, bạn nên viết một cái gì đó như:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
Đó là phức tạp hơn một chút, nhưng nó có lợi thế là bạn có thể gửi nhiều tin nhắn, và thậm chí sử dụng các loại tin nhắn khác nhau (Cảnh báo, Gỡ lỗi, Thông tin, Lỗi, vv ...) Bạn có thể đọc thêm về khung tin nhắn django tại đây: The messages framework | Django Documentation.
có bạn tìm ra cách để nhận "đây là một lỗi" tin nhắn vào tùy chỉnh Trình xử lý 404? @ Alasdair, nbv4 tôi sẽ thực sự apretiate giúp đỡ của bạn. – marianobianchi
@marianobianchi Tôi đã nhầm lẫn nói rằng sẽ có thể sử dụng trình xử lý 404 tùy chỉnh để đạt được điều này, nhưng nó không thực sự khả thi. Đã có [yêu cầu kéo] (https://github.com/django/django/pull/1397) cho một thay đổi bắt buộc nhưng đã bị từ chối. Sau khi nghĩ về nó, tôi đồng ý với quyết định. Tôi nghĩ tốt hơn nên sử dụng khung thư như Euribates đề xuất hoặc hiển thị mẫu tùy chỉnh và trả lại trạng thái 404. Nếu bạn bao gồm thông báo ngoại lệ trong mẫu 404 mặc định, có nguy cơ bạn hiển thị thông báo lỗi không phù hợp cho người dùng cuối của mình. – Alasdair