Django: staticfiles
Para fazer com que o Django utiliza arquivos estáticos — usualmente acessários para renderizar os arquivos HTML (tais como css, javascript, fonts, imagens etc) — é necessário ajustar alguns parâmetros no arquivo settings, conforme abaixo:
# Static files (CSS, JavaScript, Images)
# The URL which will serve static files
STATIC_URL = '/static/'
# Where to look to search
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'dados/static_app'),
os.path.join(BASE_DIR, 'sabesp/static_app'),
]
# Where locate files, and comment the AppDirectoriesFinder
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
# Name of dir that will be create
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Ainda, na sessão Middleware, é necessário acrescentar o comando 'whitenoise.middleware.WhiteNoiseMiddleware'
, conforme é apresentado abaixo.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # Add Whitenoise Middleware
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Comando para reunir todos os arquivos na pasta definida em STATIC_ROOT
python manage.py collectstatic
É possivel procurar a fonte de um arquivo, ou seja, qual o local que ele está buscando o arquivo:
python manage.py findstatic css/base.css admin/js/core.jspython manage.py
WhiteNoise
- http://whitenoise.evans.io/en/stable
Problemas
Could be not found
Nos projetos que eu utiliava o template AdminLTE, ao realizar o comando collectstatic
eu recebia o seguinte erro:
whitenoise.storage.MissingFileError: The file 'plugins/jquery-ui/"images/ui-icons_555555_256x240.png"' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage object at 0x7f04d25224d0>.
The CSS file 'plugins/jquery-ui/jquery-ui.css' references a file which could not be found:
plugins/jquery-ui/"images/ui-icons_555555_256x240.png"
Please check the URL references in this CSS file, particularly any
relative paths which might be pointing to the wrong location.
Para contornar econtrei discussão em stackoverflow: Whitenoise giving errors on jquery-ui.css when doing collectstatic que sugeria deletar all first comment block in all jquery css file e deu certo.
Por exemplo, o arquivo que era assim:
/*! jQuery UI - v1.13.0 - 2021-10-07
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme
* Copyright jQuery Foundation and other contributors; Licensed MIT */
/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
display: none;
}
Ficou assim:
.ui-helper-hidden {
display: none;
}
Sem sucesso!
Tentei também substiuir…
Substitui "images/ui-icons_555555_256x240.png"
por %22images%2Fui-icons_555555_256x240.png%22
Sem sucesso!
Solução tosca: deletar as entradas!
The JS file ‘plugins/pdfmake/pdfmake.js’ references a file which could not be found:
Recebia o erro que determinado arquivo fazia menção a outro… que não constava nos arquivos estáticos.
The JS file 'plugins/pdfmake/pdfmake.js' references a file which could not be found:
plugins/pdfmake/FileSaver.min.js.map
Fui procurar a menção. Tratava-se de um comentário: excluí!
Referências
- YouTube: Try Django 1.9 - 25 of 38 - Setup Static Files - CSS & Javascript & Images in Django
- YouTube: Understanding Django Static Files
- Medium: Understanding static files in Django + Heroku
- Heroku Dev Center: Django and Static Assets
- Django: Static Files
- StackOverflow: Found another file with the destination path - where is that other file?
Deixe um comentário