Tôi muốn sử dụng một số CSS và hình ảnh tùy chỉnh trên các trang 404/500 tùy chỉnh mà tôi đã tạo. Django không bao gồm biến STATIC_URL trong các trang đó. Điều gì sẽ là cách tốt nhất để thực hiện điều này? Tôi cũng đã thử chế độ xem 404/500 tùy chỉnh và hiển thị một tệp HTML tùy ý nhưng nó không hoạt động quá lớn.Sử dụng các tệp tĩnh trong các trang 404/500 tùy chỉnh ở Django
Trả lời
Đây là cách tôi sẽ làm điều đó:
# urls or settings
handler500 = 'mysite.views.server_error'
# views
from django.shortcuts import render
def server_error(request):
# one of the things ‘render’ does is add ‘STATIC_URL’ to
# the context, making it available from within the template.
response = render(request, '500.html')
response.status_code = 500
return response
Nó đáng nói lý do Django không làm điều này theo mặc định:
“ Chế độ xem 500 mặc định không chuyển biến nào tới mẫu 500.html và được hiển thị bằng một Ngữ cảnh trống để giảm cơ hội lỗi bổ sung. ”
Tôi tin rằng bạn sẽ chỉ cần ghi đè lên xử lý lỗi 404/500 mặc định. Điều này sẽ giúp bạn bắt đầu:
http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views
trong câu hỏi của tôi đã đề cập đến tôi đã làm điều đó .. – heri0n
Điều gì sẽ xảy ra khi bạn cố gắng bao gồm '{% tải tĩnh từ staticfiles%}' trong chế độ xem tùy chỉnh? – GordonsBeard
Tôi chạy vào cùng một vấn đề và tìm ra giải pháp mà không cần mẫu tùy chỉnh hoặc xử lý. Từ Django 1.4 trên bạn có thể sử dụng các thẻ get_media_prefix và get_static_prefix để truy cập MEDIA_URL và STATIC_URL khi chúng không nằm trong ngữ cảnh.
Trong trường hợp cụ thể của tôi (Django 1.5), tôi muốn truy cập một số hình ảnh tĩnh trong trang 500.html của tôi. Tôi chỉ cần thêm vào đầu của mẫu
{% load static %}
và sau đó thu được các phương tiện truyền thông và các url tĩnh với các thẻ
<img src="{% get_media_prefix %}logo.png">
<img src="{% get_static_prefix %}img/error_pages/error.png" style="height:235px;">
Bạn có thể tìm thấy những tài liệu chính thức ở đây: https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#get-static-prefix
vậy làm cách nào để tôi tham chiếu các tệp tĩnh của mình? – heri0n
Điều này thêm 'STATIC_URL' vào ngữ cảnh của mẫu. Vì vậy, bạn có thể sử dụng nó như bình thường. – Matt