Django: статические файлы в шаблоне 404 - PullRequest
0 голосов
/ 30 октября 2011

Как включить таблицы стилей и изображения в шаблон страницы 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.На всех остальных страницах статические файлы обслуживаются просто отлично.

Обновление : Появляется, после установки DEBUG = False в settings.py, статические файлы на всех других страницах также перестали обслуживаться.

Ответы [ 3 ]

2 голосов
/ 30 октября 2011

Похоже, staticfiles приложение работает с DEBUG = False.Только он не берет файлы из каталогов static отдельных приложений.Он будет обслуживать файлы из глобального каталога STATIC_ROOT (из settings.py).

Чтобы скопировать статические файлы в STATIC_ROOT, необходимо выполнить команду collectstatic :

python manage.py collectstatic
0 голосов
/ 31 октября 2011

Когда я использую DEBUG = True, у меня обычно есть этот фрагмент в моем корневом urlconf:

(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}),
0 голосов
/ 30 октября 2011

Так как Competition_processor.static уже находится в TEMPLATE_CONTEXT!Вы можете просто использовать переменную STATIC_URL в своем шаблоне: follow doc:

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

Если TEMPLATE_CONTEXT_PROCESSORS содержит этот процессор, каждый RequestContext будет содержать переменную STATIC_URL, предоставляя значениепараметр STATIC_URL.

И мы также знаем, что обработчик представления 404 использует объект RequestContext, следующий код взят из django.views.defaults.py:

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

Так что простоиспользуйте {{ STATIC_URL }} в вашем шаблоне, он должен работать!

...