Подтвердить что ты не робот

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

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

Итак, мои статические файлы подаются с C:/Users/Dan/seminarWebsite/static/, в которых у меня есть вспомогательные папки для изображений, css и т.д.

НАСТРОЙКИ:

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

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

URLS:

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

TEMPLATE

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Что это.

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

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

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

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

  • При создании шаблона убедитесь, что вы используете 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), и вам хорошо идти.

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

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

  • Запустите ./manage.py collectstatic, чтобы выполнить сортировку.

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