Разработка статических файлов Django - PullRequest
18 голосов
/ 07 февраля 2012

Похоже, что это вызывает много путаницы, судя по количеству похожих заголовков по этой теме, однако пробуя все, что я мог найти в статических файлах на сервере разработки django, я почти потерял надежду!

Таким образом, мои статические файлы обслуживаются с C: / Users / Dan / seminWebsite / static / , в котором у меня есть подпапки для изображений, CSS и т. Д.

НАСТРОЙКИ:

STATIC_ROOT = 'C:/Users/Dan/seminarWebsite/static/'  
STATIC_URL = '/static/'  

Приложение статических файлов также активно.

URL:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns  
urlpatterns += staticfiles_urlpatterns()

ШАБЛОН:

"{{ STATIC_URL }}images/vision.jpeg"

Однако по этому адресу появляется только неработающая ссылка: http://127.0.0.1:8000/homepage/images/vision.jpeg и я не думаю, что он должен быть по этому адресу (домашняя страница - это URL-адрес страницы, к которой вызывается файл статического изображения).

1 Ответ

64 голосов
/ 07 февраля 2012

Судя по тому, что вы уже опубликовали, похоже, что вы следуете документам для django.contrib.staticfiles. Я согласен с тем, что документам может быть трудно следовать, особенно если вы новичок в django.

Я полагаю, что путаница связана с тем, что django.contrib.staticfiles имеет два режима работы:

  1. На этапе разработки, где используется сервер разработки , он динамически ищет статические файлы в предопределенных каталогах и делает его доступным в STATIC_URL
  2. Для развертывания он помогает объединять статические файлы в один каталог (определенный с помощью STATIC_ROOT), так что статические файлы могут размещаться на веб-сервере, подходящем для статических файлов. Это сопоставление выполняется с использованием python ./manage.py collectstatic.

Вот краткое изложение того, как начать работу. У меня не было возможности попробовать это, поэтому могут быть ошибки. Надеюсь, это поможет вам начать и, по крайней мере, поможет вам понять документы. Если есть сомнения, обратитесь к документации.

Размещение статических файлов на сервере разработки

  1. Убедитесь, что у вас есть 'django.contrib.staticfiles' в INSTALLED_APPS

  2. Укажите STATIC_URL. Это путь к вашим статическим файлам.

    STATIC_URL = '/static/'
    
  3. Убедитесь, что ваши файлы находятся в правильных каталогах. По умолчанию staticfiles будет искать файлы в каталоге static/ каждого установленного приложения, а также в каталогах, определенных в STATICFILES_DIRS. (Это поведение зависит от бэкэндов, перечисленных в STATICFILES_FINDERS). В вашем случае вы, вероятно, захотите указать свой каталог в STATICFILES_DIRS:

    STATICFILES_DIRS = ( 
          'C:/Users/Dan/seminarWebsite/static/',  
    )
    
  4. Сделайте вид доступным, добавив следующее к end из urls.py:

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    
  5. Убедитесь, что у вас есть DEBUG = True в settings.py.

Вот и все.

Если вы запустите свой сервер разработки (./manage.py runserver), вы сможете получить доступ к вашему файлу через http://localhost:8000/static/images/vision.jpeg (который обслуживает C:/Users/Dan/seminarWebsite/static/images/vision/jpeg).

Ссылки на статические файлы в ваших шаблонах

Есть два способа получить правильную ссылку для ваших статических файлов - с помощью тега шаблона staticfiles и сделать STATIC_URL доступным для ваших шаблонов. Поскольку вы пытались последнее, мы будем придерживаться этого.

  1. Убедитесь, что у вас есть 'django.core.context_processors.static' в TEMPLATE_CONTEXT_PROCESSORS. Если вы не переопределили TEMPLATE_CONTEXT_PROCESSORS, то делать нечего , поскольку по умолчанию оно должно быть .

  2. Убедитесь, что вы используете RequestContext при визуализации вашего шаблона. Пример: * * тысяча сто одна

    from django.template import RequestContext
    # ...
    
    def some_view(request):
        # ...
        return render_to_response('my_template.html', {
            "foo" : "bar",  # other context 
        }, context_instance = RequestContext(request))
    

Теперь вы должны иметь возможность использовать следующее в my_template.html:

<a href="{{ STATIC_URL }}images/vision.jpeg" />

Размещение статических файлов на рабочем сервере.

Если все статические файлы, которые вам нужно обслуживать, хранятся в этом одном каталоге (C:/Users/Dan/seminarWebsite/static), то вы почти у цели. Просто настройте свой веб-сервер для размещения этого каталога на /static/ (или на том, что вы установили для STATIC_URL), и все готово.

Если у вас есть файлы, разбросанные по разным каталогам и / или статическим файлам, относящимся к конкретному приложению, то вам нужно их сопоставить.

  1. Установите STATIC_ROOT в каталог, в котором вы хотите хранить сопоставленные файлы.

  2. Выполните ./manage.py collectstatic, чтобы выполнить сопоставление.

  3. Сконфигурируйте ваш веб-сервер для размещения этого каталога (STATIC_ROOT) на /static/ (или на том, что вы установили для STATIC_URL).

...