Arquivos estáticos com wsgi
Um problema que pode surgir ao publicar um site/sistema em Python/Django é a configuração dos arquivos estáticos (imagens, css, scripts, etc).
Para resolver isso o manual do Django orienta o uso das varíaveis STATIC_URL
e STATIC_ROOT
no settings.py
. Você pode encontrar as orientações aqui: https://docs.djangoproject.com/pt-br/3.0/howto/static-files/
Além disso, vc vai precisar configurar o servidor web para servir os arquivos a partir dos paths indicados no settings.py: https://docs.djangoproject.com/pt-br/3.0/howto/deployment/wsgi/modwsgi/#serving-files
Deploy em hospedagens compartilhadas
Contudo, o cenário pode ficar um pouco mais complexo quando não temos acesso aos arquivos de configuração do servidor web, como no caso de hospedagens compartilhadas, por exemplo. Para resolver tal problema a ideia começa a orbitar o wsgi – o arquivo que configura a interfacce entre o servidor web e a aplicação Python/Django. Apesar do manual do Django informar que o framework não serve arquivos estáticos, muitos acreditam que o wsgi pode fazer isso. Para isso há dois pacotes Python que podem ser usados:
- dj-static: https://pypi.org/project/dj-static/
- whitenoise: http://whitenoise.evans.io/en/stable/
Usando o pacote dj-static
No nosso caso vamos usar o dj-static. Instale no seu projeto com:
pip install dj-static
Se vc estiver em um servidor compartilhado, talvez seja necessário instalar o pacote apenas no seu diretório /home
. Para isso use a opção --user
:
pip install dj-static --user
Feito isso é hora de configurar o seu arquivo wsgi. Veja o exemplo abaixo:
from django.core.wsgi import get_wsgi_application from dj_static import Cling (...) application = Cling(get_wsgi_application())
Para concluir basta acessar o site/sistema para verificar se os arquivos foram estáticos foram servidos. Caso contrário, verifique as variáveis STATIC_URL
e STATIC_ROOT
no arquivo settings.py
do seu projeto.
Você já passou por esse problema em hospedagens compartilhadas? Que solução encontrou?
Referências
WSGI: https://wsgi.readthedocs.io/en/latest/what.html
PEP333 : https://www.python.org/dev/peps/pep-3333/
WSGI no Django: https://docs.djangoproject.com/pt-br/3.0/howto/deployment/wsgi/