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