2013-02-27 23 views
7

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

14

Đâ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. ”

- Adrian Holovaty, Django documentation

+0

vậy làm cách nào để tôi tham chiếu các tệp tĩnh của mình? – heri0n

+1

Đ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

-1

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

+0

trong câu hỏi của tôi đã đề cập đến tôi đã làm điều đó .. – heri0n

+0

Đ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

2

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