В чем разница между статическим 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 онлайн.