it-swarm.com.ru

django статический статический URL статический корень

Я смущен static root и хочу уточнить вещи.

Чтобы обслуживать статические файлы в Django, в settings.py и urls.py должно быть следующее:

import os
PROJECT_DIR=os.path.dirname(__file__)

1. Абсолютный путь к каталогу, в который нужно собирать статические файлы

STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')

2. Префикс URL для статических файлов

STATIC_URL = '/static/'

3. Дополнительные места для статических файлов

STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)

... и в urls.py следующие строки:

from Django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
    r'^static/(?P<path>.*)$',
    'Django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}
))

4. Мы также используем python manage.py collectstatic

Вопросы:

  1. Может ли кто-нибудь объяснить мне рабочий процесс: как все должно быть в идеале. На данный момент я копирую/вставляю приведенные выше фрагменты кода в назначенные им места и продолжаю создавать новые файлы в статическом каталоге, и это работает. Однако в моем settings.STATIC_ROOT я указал на другой каталог. 

  2. Было бы замечательно, если бы кто-то мог объяснить рабочий процесс каждого параметра: как собирать файлы и управлять ими, и что будет хорошей практикой для подражания. 

Благодарю. 

100
user993563

STATIC_ROOT

Абсолютный путь к каталогу, где ./manage.py collectstatic будет собирать статические файлы для развертывания . Пример: STATIC_ROOT="/var/www/example.com/static/"

теперь команда ./manage.py collectstatic скопирует все статические файлы (т.е. в статическую папку в ваших приложениях, статические файлы по всем путям) в каталог /var/www/example.com/static/. теперь вам нужно только обслуживать этот каталог на Apache или nginx..etc. 

STATIC_URL

URL, из которого обслуживаются статические файлы в каталоге STATIC_ROOT (Apache или nginx..etc) . Пример: /static/ или http://static.example.com/

Если вы установите STATIC_URL = 'http://static.example.com/', то вы должны обслуживать папку STATIC_ROOT (т.е. "/var/www/example.com/static/") с помощью Apache или nginx по URL 'http://static.example.com/' (чтобы вы могли ссылаться на статический файл '/var/www/example.com/static/jquery.js' с 'http://static.example.com/jquery.js')

Теперь в ваших Django-шаблонах вы можете ссылаться на него:

{% load static %}
<script src="{% static "jquery.js" %}"></script>

который сделает:

<script src="http://static.example.com/jquery.js"></script>
66
simple_human

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

STATIC_ROOT: оставьте это пустым, когда вы выполните manage.py collectstatic, он будет искать все статические файлы в вашей системе и перемещать их сюда. Ваш статический файловый сервер должен быть привязан к этой папке, где бы он ни находился. Проверьте это после запуска collectstatic, и вы увидите структуру каталогов, созданную Django.

--------Редактировать----------------

Как указывает @DarkCygnus, STATIC_ROOT должен указывать на каталог в вашей файловой системе, папка должна быть пустой, так как она будет заполнена Django.

STATIC_ROOT = os.path.join (BASE_DIR, 'staticfiles'))

или же

STATIC_ROOT = '/ opt/web/project/static_files

'

-------- Конец редактирования -----------------

STATIC_URL: '/ static /' обычно в порядке, это просто префикс для статических файлов.

25
keni

Все ответы выше полезны, но никто не решил мою проблему. В моем производственном файле мой STATIC_URL был https://<URL>/static, и я использовал тот же STATIC_URL в моем файле dev settings.py. 

Это вызывает тихую ошибку в Django/conf/urls/static.py. 

Тест Elif not settings.DEBUG or '://' in prefix: Выбирает «//» в URL и не добавляет статический шаблон URL, в результате чего статические файлы не будут найдены. 

Было бы полезно, если бы Django выложил сообщение об ошибке, в котором говорилось, что вы не можете использовать функцию http(s):// с кодом DEBUG = True

Мне пришлось изменить STATIC_URL на «/ static /»

0
MIkee