В чем разница между статическим URL и статическим корнем в Django?

Я несколько смущен тем, что разница между STATIC_URL и STATIC_ROOT в Django's 'staticfiles' app.

Я думаю, что понимаю, что STATIC_ROOT is: это, по сути, расположение на сервере, где staticfiles'collectstatic команда разместит статические файлы, собранные из вашего проекта django. The collectstatic поиск команд в местоположениях, указанных в STATIC_FINDERS настройка.

однако, что именно делает STATIC_URL делать? Что? должно ли это быть установлено? По-видимому, он предназначен для установки чего-то такого, что пользователи могут получить доступ к статическим файлам. Но что это за отношения с STATIC_ROOT?

почему значение по умолчанию -STATIC_URL просто /static/ ? Делает STATIC_URL должны иметь возможность ссылаться STATIC_ROOT?

3 ответов


как вы упомянули, это довольно ясно из документации:

STATIC_ROOT:

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

STATIC_URL

по умолчанию: нет

URL для использования при обращении к статическим файлам, расположенным в STATIC_ROOT.

пример: "/static/" или "http://static.example.com/"

время STATIC_ROOT это просто путь к каталогу, где были собраны статические файлы,STATIC_URL - это URL, который будет обслуживать эти статические файлы.

и, как вы можете видеть в примере, можно определить STATIC_URL как поддомен "http://static.example.com/" и когда вы используете его в шаблоне:

<link rel="stylesheet" href="{{ STATIC_URL }}css/base.css" type="text/css" />

это будет рассматриваться как:

<link rel="stylesheet" href="http://static.example.com/css/base.css" type="text/css" />

но если STATIC_URL просто /static/ тогда приведенная выше ссылка будет указывать кому:

<link rel="stylesheet" href="/static/css/base.css" type="text/css" />

а, с этого href начинается с / он добавит ваш домен для доступа к статическим файлам:http://yourdomain/static/css/base/css


почему значение по умолчанию -STATIC_URL просто /static/ ? Должен ли STATIC_URL иметь возможность ссылаться STATIC_ROOT?

значение по умолчанию STATIC_URL не /static/ но нет, как вы можете видеть в документации. И, это не должно ссылаться на STATIC_ROOT потому что это не зависит от его (как показано в примере выше).


STATIC_URL - это просто префикс или url, который добавляется к вашим статическим файлам и используется static метод в шаблонах Django в основном. Для получения дополнительной информации прочитайте этой.

STATIC_ROOT - это каталог или расположение, в котором развертываются статические файлы при запуске collectstatic.

Итак, когда у вас есть STATIC_URL определяется как /static/, тогда ваши пользователи будут просить статические файлы /static/file-name.example (относительный URL на вашем сервер.)

если бы вы настроили свой collectstatic чтобы развернуть статические файлы на другом сервере, вы можете установить STATIC_URL to https://static.example.org/.

тогда вы получите доступ к своим файлам по адресу https://static.example.org/filename.ext.

еще один пример - использование библиотеки Boto S3 для загрузки статического и медиаконтента в Amazon S3. Мой STATIC_URL выглядит так:

STATIC_URL = '//%s/%s/' % (CLOUDFRONT_DOMAIN, STATIC_S3_PATH)

он создает статический префикс URL, как это //mycloudfront.whatever/static/ так пользователи будут обслуживаться файлы из наших В CDN.

мой определено как:

STATIC_ROOT = '/%s/' % STATIC_S3_PATH

...потому что мне нужно загрузить свой контент в Amazon S3 и не CloudFront онлайн.


STATIC_ROOT где все ваши активы будут собраны