Esta é provavelmente uma pergunta estúpida, mas não está clicando na minha cabeça.
No Django, a convenção é colocar todos os seus arquivos estáticos (isto é, css, js) específicos do seu aplicativo em uma pasta chamada static . Portanto, a estrutura ficaria assim:
mysite/
manage.py
mysite/ --> (settings.py, etc)
myapp/ --> (models.py, views.py, etc)
static/
Em mysite/settings.py
eu tenho:
STATIC_ROOT = 'staticfiles'
Então, quando executo o comando:
python manage.py collectstatic
Ele cria uma pasta chamada staticfiles
no nível raiz (mesmo diretório que myapp/
)
Qual é o objetivo disso? Não é apenas criar uma cópia de todos os meus arquivos estáticos?
fonte
Os arquivos estáticos do Django podem estar em muitos lugares. Um arquivo que é servido como
/static/img/icon.png
pode vir de vários lugares . Por padrão:FileSystemFinder
vai procurar porimg/icon.png
em cada umSTATICFILES_DIRS
,AppDirectoriesFinder
vai procurar porimg/icon.png
nastatic
subpasta em cada um de seusINSTALLED_APPS
. Isso permite que bibliotecas como Django Admin adicionem seus próprios arquivos estáticos ao seu aplicativo.Agora: isso só funciona se você executar
manage.py runserver
com DEBUG = 1. Quando você entrar no ar, o processo Django não servirá mais os ativos estáticos. Seria ineficiente usar Django para atendê-los, existem ferramentas mais especializadas especificamente para isso.Em vez disso, você deve fazer algo assim:
static
diretório em algum lugar do seu servidor da web ou um armazenamento de arquivos de terceiros)/static/*
diretamente desse diretório e redirecionar quaisquer outras solicitações para Django.collectstatic
é um script pronto que prepara esse diretório para você, para que possa conectá-lo diretamente ao seu script de implantação.fonte
Na instalação de produção, você deseja ter URLs persistentes. O URL não muda, a menos que o conteúdo do arquivo mude.
Isso evita que os clientes tenham a versão errada do arquivo CSS ou JS em seus computadores ao abrir uma página da web do Django. Django staticfiles detecta mudanças de arquivo e atualiza URLs de acordo, de forma que se o arquivo CSS ou JS mudar, o navegador da web baixe a nova versão.
Isso geralmente é obtido adicionando hash MD5 ao nome do arquivo durante a
collectstatic
execução.Editar: Veja também a resposta relacionada a vários aplicativos.
fonte
settings.STATICFILES_STORAGE
padrão éStaticFilesStorage
, então o MD5 só será ativado depois que você, por exemplo, defini-lo comoManifestStaticFilesStorage
, estou correto?É útil quando há vários aplicativos django dentro do site.
collectstatic
irá, então, coletar arquivos estáticos de todos os aplicativos em um único lugar - para que possa ser servido em um ambiente de produção.fonte