0

如何使用默認視圖將樣式表和圖像包含到404頁面模板中?Django:404模板中的靜態文件

我創建了一個404.html文件在網站的templates目錄的根目錄:

<!DOCTYPE html> 
<html> 
<head> 
    {% load static %} 
    <link rel="stylesheet" href="{% get_static_prefix %}css/404.css" /> 
</head> 
<body class="page-404"> 
    <p>Not found.</p> 
</body> 
</html> 

諷刺的是,404.css找不到。 404.css文件位於其中一個應用程序的「static」目錄中。

服務器是manage.py runserver。在其他每個頁面上,靜態文件都可以正常使用。

更新:在settings.py中設置DEBUG = False之後,似乎也停止提供所有其他頁面上的靜態文件。

+0

您使用Django的哪個版本? 1.3? –

+0

@Arthur Neves,1.3,是的。 – katspaugh

回答

2

看來,staticfiles應用程序確實與DEBUG = False一起使用。只有它不會從各個應用程序的目錄中獲取文件。它將提供來自全球STATIC_ROOT目錄(來自settings.py)的文件。

以獲取靜態文件複製到STATIC_ROOT,你需要運行collectstatic command

python manage.py collectstatic 
0

由於contest_processor.static是在TEMPLATE_CONTEXT了!你可以使用變量STATIC_URL在你的模板:遵循DOC:

https://docs.djangoproject.com/en/1.3/ref/templates/api/#django-core-context-processors-static

如果TEMPLATE_CONTEXT_PROCESSORS包含了這個處理器,每個RequestContext將包含變量STATIC_URL,提供STATIC_URL設置的值。

return http.HttpResponseNotFound(t.render(RequestContext(request, {'request_path': request.path}))) 

所以只需使用{{ STATIC_URL }}在您的模板,它應該工作:

而且我們也知道,404視圖處理程序使用RequestContext對象,遵循代碼django.views.defaults.py了!

+0

謝謝!我必須提到我正在使用'django.contrib.staticfiles',它不能與'DEBUG = False'一起使用。如果您將'DEBUG'設置爲'True',則404模板將不會呈現。無論如何,'{%get_static_prefix%}'等同於{{STATIC_URL}}'。 – katspaugh

0

當我使用DEBUG = True時,我通常在我的根URL配置這個片段:

(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
    {'document_root': settings.STATIC_ROOT}),