Uploads de Imagem no Django Admin | OhMyCode
Uploads de Imagem no Django Admin
27/08/2017 - 2 min de leitura
Quem nunca quis desenvolver aquele blog pessoal ou até mesmo um e-commerce que atire a primeira pedra =P. Em todo caso, upload de imagens no Django Admin não é uma tarefa complicada de ser realizada.
A primeira coisa a ser feita, é definir, no settings.py, os caminhos para as variáveis MEDIA_URL e MEDIA_ROOT. A primeira mostra o endereço das imagens com base no projeto Django, já a segunda mostra o caminho absoluto da imagem, ou seja, onde a imagem está localizada no seu computador.
Um exemplo de declaração dessas variáveis:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_images')
Importante: Quando se está em ambiente de desenvolvimento, o Django assume o trabalho de servir as imagens. Mas em produção, temos que incluir no arquivo urls.py do projeto principal (fica na mesma pasta de settings.py) o caminho para essas pastas. Como no exemplo a baixo:
Pronto. Aṕos definirmos os caminhos, basta criar no seu model um campo do tipo ImageField().
Vou usar como exemplo um blog. Então, imagine que em models.py você possua uma classe Post.
titulo = models.CharField(max_length = 200)
fotoCapa = models.ImageField()
Obs: Não se esqueça de registrar o classe Post em admin.py.
Agora está quase tudo pronto. Se você tentar rodar um makemigrations e migrate irá ocorrer um erro. Isso porque o campo ImageField() necessita do Pillow instalado. Então basta você executar o seguinte comando (com o virtualenv ativado):
(env) user@hostname:~$ pip install Pillow
O Pillow é uma bliblioteca python para imagens. Documentação do Pillow.
Após instalar o Pilow, agora você pode executar o makemigrations e o migrate para o atualizar o BD.
(env) user@hostname:~$ python manage.py makemigrations
(env) user@hostname:~$ python manage.py migrate
Parabéns! Você conseguiu resolver seu problema. Agora pode fazer upload de imagens no Django Admin :)
Exibindo as imagens salvas:
Existe várias maneiras de exibir as imagens salvas dos Posts. Mas a mais fácil, na minha opinião, é usando o atributo url da imagem. Mas como pegar essa url? Devo adicionar manualmente? Felizmente, o Django já nos dá e não precisamos ficar batendo cabeça.
Você deve colocar {{ post.fotoCapa.url }} no src da tag img (onde está sendo carregando as informações do post).