FAQ: Usando o Django

Por que acontece um erro ao importar o DJANGO_SETTINGS_MODULE?

Certifique-se de que:

  • A variável de ambiente DJANGO_SETTINGS_MODULE está configurada para um módulo Python totalmente qualificado (ex:. “mysite.settings”).

  • O módulo está em sys.path (import mysite.settings deve funcionar).

  • O módulo não contém erros de sintaxe (é claro).

  • Se você está usando o mod_python, mas não está usando o manipulador de requisições do Django, você precisa corrigir um bug do mod_python relacionado ao uso de SetEnv; antes de você importar qualquer coisa do Django você precisa fazer o seguinte:

    os.environ.update(req.subprocess_env)
    

    (onde req é o objeto de requisição do mod_python).

Eu não gosto da sua linguagem de template. Eu tenho de usá-la?

Pensamos que nossa linguagem de templates é a melhor coisa inventada desde os pedaços de bacon mas reconhecemos que a escolha da linguagem de templates é uma discussão quase religiosa. Não há nada no Django que requer que você use a linguagem de template, então, se você prefere o ZPT, Cheetah, ou o que quer que seja, sinta-se livre para usá-los.

Eu tenho de usar sua camada de modelo/banco de dados?

Não. Assim como o sistema de templates, a camada de modelo/banco de dados está desacoplada do resto do framework.

A única exceção é: se você usar uma biblioteca diferente de banco de dados, você irá perder o sistema de administração gerado automaticamente pelo Django. Esse aplicativo é acoplado à camada de banco de dados do Django.

Como eu uso os campos de imagem e arquivos?

O uso de um FileField ou um ImageField nos models requer alguns passos:

  1. No seu arquivo de configurações, defina o MEDIA_ROOT como o caminho completo para o diretório onde você gostaria que o Django salvasse os arquivos enviados. (Para melhor performance, esses arquivos não são guardados em um banco de dados.) Defina o MEDIA_URL como a URL pública para esse diretório. Assegure-se de que esse diretório tenha permissão de escrita para o usuário do servidor Web.
  2. Adicione o FileField ou ImageField ao seu model, definindo a opção upload_to para instruir o Django para qual subdiretório do MEDIA_ROOT ele deve enviar os arquivos.
  3. Tudo que será gravado no seu banco de dados é o caminho para o arquivo (relativo ao MEDIA_ROOT). Você pode também querer usar o atributo de conveniência url fornecido pelo Django. Por exemplo, se o seu ImageField é chamado mug_shot, você pode obter a URL absoluta para a sua imagem em um template com {{ object.mug_shot.url }}.

Como eu torno uma variável disponível em todos os meus templates?

Algumas vezes seus templates precisam todos da mesma coisa. Um exemplo comum seria menus gerados dinamicamente. À primeira vista, parece lógico simplesmente adicionar um dicionário comum ao contexto do template.

A solução correta é usar um RequestContext. Detalhes em como fazer isso estão aqui: Estendendo Context: RequestContext.