Upload dinâmico de imagens no django.

574 views
Skip to first unread message

Jan Palach

unread,
Oct 26, 2009, 12:06:28 PM10/26/09
to django...@googlegroups.com
Fala pessoal,

Não sei se lembram, mas faz algum tempo que postei um problema
que eu vinha tendo com upload dinâmico de imagens, só para recordar
aqui:

Estou fazendo uma espécie de galeria de imagens para venda de
arte digital para minha esposa(ela trabalha com composite e tal). E eu
queria fazer um esquema mais flexivel de upload de imagens, onde ela
pudesse selecionar n imagens e após isso no mesmo form, selecionar/
criar um destino para elas, que seria mapeado atraves da categoria/
evento selecionado, exemplo:

Quero enviar imagem1, imagem2 para a categoria composites. O
django teria de criar o diretório 'composites' abaixo do diretório
padrão para media que configurei no settings.py, no meu caso media/
imagens, ficaria assim:

media/imagens/composites/<aqui viriam imagem1, imagem2>

e assim por diante se eu fosse criar outra categoria isso seria
dinâmico....

Após muito tentar e ver exemplos na rede que não funcionavam,
comecei a ler o fonte do django mais precisamente no arquivo fiels.py.
Ah, rezei e pedi auxílio para Ozzy Osbourne tb, ele me aconselhou a
olhar o fonte e ler o livro do Marinho, sábio conselho.

Após fuçar um monte, vi no livro do Marinho que o que eu
precisava era aliar os signals a algo mais, esse algo mais era apenas
algum conhecimento de python e de como as informações eram
concentradas no django


Bom segue o código no seguinte link:

http://dpaste.com/hold/112176/

* Gostaria da opinião de vcs que são feras em django, eu comecei a
estudar a pouco tempo. O que fiz é gambiarra? A solução é boa?


**Próximo passo criar minhas views e usar jquery para selecionar
multiplos arquivos :)...


[]`s

Heigler

unread,
Oct 26, 2009, 8:29:46 PM10/26/09
to Django Brasil
Jan, não achei muito legal usar signals pra ficar limpando o
upload_to, acho que esse não é bem o propósito do uso delas, no
entanto, foi criativo =)

Tomei a liberdade de modificar um pouco teu models.py:
http://dpaste.com/112421/

O que eu fiz foi basicamente estender o ImageField interagindo no
método pre_save no qual eu já tenho acesso a instância do model e
posso assim passar qualquer valor pro upload_to.
Eesse exemplo tá bem amarrado e o campo só serviria para esse caso, no
entanto, é totalmente possível fazer algo mais flexível, um campo que
talvez receba uma lista de campos e então fosse "trilhando" o caminho
de upload é uma idéia.


Essa não é a única maneira de se fazer isso, com certeza existem
várias outras, de qualquer forma fica a dica.

Abrs,



Jan Palach

unread,
Oct 27, 2009, 7:19:15 AM10/27/09
to django...@googlegroups.com
Olá Heigler,
Eu tinha realmente esta dúvida de ficar usando signal para limpar
o campo upload_to(achei particularmente feio). Gostei da sua solução,
obrigado pela dica e por responder :), e por alterar o código tb :)


Abraços.

hcarvalhoalves

unread,
Oct 27, 2009, 1:02:51 PM10/27/09
to Django Brasil
O argumento 'upload_to' do FileField pode ser uma função ao invés de
uma string. Nesse caso, a função recebe a instância da classe que
contêm o FileField e o nome do arquivo original, e deve retornar um
caminho completo. [1]

Se a imagem pertence a uma categoria, seria fácil fazer isso:


def caminho_por_categoria(instance, filename):
from django.template.defaultfilters import slugify
return os.path.join('/media', slugify(instance.categoria.nome),
filename)

class Imagem(models.Model):
categoria = models.ForeignKey(Categoria)
img = models.ImageField(upload_to=caminho_por_categoria)


Recomendo ler toda a documentação oficial do Django (que é ótima por
sinal) para evitar esse tipo de "reinvenção de roda" ;)

[1] http://docs.djangoproject.com/en/dev/ref/models/fields/#filefield

Jan Palach

unread,
Oct 27, 2009, 1:14:21 PM10/27/09
to django...@googlegroups.com
Puxa que simples ficou seu exemplo hcarvalhoalves. Realmente tem n
formas de se fazer isso. Vejo que a minha não foi nada elegante,
obrigado mais uma vez à vocês por responder minha dúvida.


[]`s

Mário Neto

unread,
Oct 28, 2009, 12:27:07 AM10/28/09
to django...@googlegroups.com
Show de bola!
Parabéns cara! =), tbm queria dar uma olhada nos fontes! valeu!

2009/10/27 Jan Palach <pal...@gmail.com>



--
Att. Mário A. Chaves Neto
Analista de Sistemas / U.I. Engineer
Cagece - Companhia de Água e Esgoto do Ceará

Josefina Sá Rangel

unread,
Nov 20, 2009, 10:06:10 AM11/20/09
to django...@googlegroups.com
Oi,
O link que você enviou aparece como página não encontrada! Por favor, recoloque-o ou me envie por email.
2009/10/26 Heigler <lordh...@gmail.com>
Reply all
Reply to author
Forward
0 new messages