Django - Статические файлы, обслуживающие файлы JavaScript, CSS и изображения - PullRequest
7 голосов
/ 10 июня 2011

Мне нужно сервер статических файлов в моем проекте Django.

Я хотел бы поместить их в каталог / static и иметь возможность ссылаться на них в своих шаблонах.

Я читал "Управление статическими файлами" в документации, и я запутался. Я следовал инструкциям, но не смог заставить его работать.

1) Я поместил свои статические файлы в / static под каждым приложением в моем проекте.

2) django.contrib.staticfiles включен в мои INSTALLED_APPS.

Я установил следующие переменные в настройках:

STATIC_ROOT = '/static/'
STATIC_URL  = '/static/'

В моем шаблоне есть следующая строка:

<script type="text/javascript" src={{ STATIC_URL }}/a_ajax.js></script> 

однако, когда я поднимаю страницу и смотрю на источник, строка выглядит так:

<script type="text/javascript" src=/a_ajax.js></script>

Кажется, что в шаблон ничего не было передано.

Что я делаю не так?

Ответы [ 3 ]

9 голосов
/ 10 июня 2011

Учитывая, что вы используете Django 1.4 или выше, вот мое объяснение:

В Django 1.3 статические файлы были отделены от загруженных файлов (носителей), и теперь у них есть собственный дом.

Для обслуживания статических файлов (CSS, JS, изображений и т. Д.) В среде разработки вам необходимо:

  1. Поместите эти файлы в подкаталог static соответствующего приложения
  2. Убедитесь, что в вашем settings.py есть django.contrib.staticfiles.finders.AppDirectoriesFinder (это поведение по умолчанию)

Структура каталогов будет:

__| project_root/
____| your_app/
______| static/
________| test.css
________| some.js

Таким образом, запрос к http://localhost:8000/static/test.css будет перенаправлен на your_app/static/test.css.

Обратите внимание, что вам не нужно изменять настройку STATIC_ROOT, пока вы не перейдете в производственную среду, в которой вам нужно будет запустить ./manage.py collectstatic.

Команда collectstatic будет собирать файлы из подкаталогов static приложения и помещать их все в уникальное место (каталог, определенный в STATIC_ROOT)

Если вы собираетесь развернуть свой проект в рабочей среде, см. . / Manage.py collectstatic документацию .

2 голосов
/ 10 июня 2011

Включить 'django.core.context_processors.static' в вашем TEMPLATE_CONTEXT_PROCESSORS var в settings.py.

см. Документацию: Ссылка на статические файлы в шаблонах

Обновление:

И в представлении используйте объект RequestContext вместо объекта Context.

def view1(request):
    ...
    context = RequestContext(...
    return render_to_response( ... , context )
1 голос
/ 06 января 2016

В более новых версиях Django я так связываю статические файлы в html-шаблоне:

<script type="text/javascript" src="{% static 'admin/js/labeler.js' %}"> </script>

Django документы на STATIC здесь: https://docs.djangoproject.com/en/1.9/howto/static-files/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...