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.

Most Commented Posts


2 Respostas to „Arquivos estáticos no Django“

  1. Silveira Neto Says:

    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.

  2. Rodrigo Amaral Says:

    @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.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>