18. 03.
De acordo com a documentação oficial, uma das maneiras de servir arquivos estáticos no Django, recomendada apenas para ambientes de desenvolvimento, consiste em mapear a view django.views.static.serve no URLconf do projeto. A operação é relativamente simples, mas um pequeno detalhe pode provocar um problema difícil de detectar imediatamente.
O primeiro argumento da função patterns(), responsável por montar a lista de padrões de URL aceitos pela aplicação, é um prefixo para as views que estão sendo mapeadas, de modo a evitar repetição de código (ver seção The view prefix). O problema ocorre caso este prefixo seja informado na mesma chamada de patterns() que mapeia django.views.static.serve. Obviamente, o prefixo será acrescentado ao nome da view, fazendo com que o Django não consiga encontrá-la.
Como o uso de django.views.static.serve só é indicado para desenvolvimento, a melhor solução é mapear esta view apenas quando o modo DEBUG estiver ativado. A seção Limiting use to DEBUG=True mostra o trecho de código necessário, devendo o programador atentar para o fato de que a lista urlpatterns inicial é concatenada com o resultado de uma nova chamada a patterns(), mas desta vez obrigatoriamente sem informar qualquer prefixo no primeiro argumento. Dessa maneira, a view será encontrada e mapeada de forma correta.
Rodrigo Amaral
May 26th, 2007 at 23:17
Chato isso do django não servir arquivos estáticos, atrapalha quem está começando. Um complicação desnecessária, afinal vamos ficar usando o Django como servidor só durante a produção mesmo.
May 28th, 2007 at 22:06
@Silveira Neto: Realmente esse é um detalhe que pode confundir a princípio. Por outro lado, creio que deve ter sido uma decisão de projeto para manter a coerência do framework. Assumindo que você quis dizer “vamos ficar usando o Django como servidor só durante o desenvolvimento“, talvez tenha sido justamente esse o motivo desse comportamento: restringir o “domínio de atuação” do Django ao que ele se propõe e deixar o conteúdo estático pra quem sabe servi-lo bem (Apache).
Obrigado pela visita.