segunda-feira, 25 de julho de 2011

Django página de erro 403, customizar template

Hoje precisei alterar e customizar a página de erro 403 (acesso negado) do Django. Como não encontrei um tutorial simples para apenas modicar o template da página resolvi escrever o que fiz.

Descobri que existe um arquivo em ".../site-packages/django/views/csrf.py" que é responsável pela página de erro 403 no Django padrão.

Dai copiei o arquivo completo para a pasta do meu projeto. (.../meu-projeto/csrf.py)

Depois adicionei:

.../settings.py
 ...  
 CSRF_FAILURE_VIEW = 'csrf.csrf_failure'  
 ...   

Pronto!

Dentro do arquivo csrf.py há o html usado na mensagem de erro 403 assim você pode alterar esse html como preferir.

Pelos mesmos motivos que fizeram os desenvolvedores deixarem o html no arquivo csrf.py eu prefiro manter e alterar o html dentro do arquivo.

Mas você pode criar um arquivo 403.htlm na pasta de templates.

Logo adicione:
.../csrf.py
 ...  
 #from django.template import Context, Template  
 from django.template import Context, Template, loader  
 ...  
 def csrf_failure(request, reason=""):  
   ...  
   try:
      t = loader.get_template('403.html')
   except:
      t = Template(CSRF_FAILRE_TEMPLATE)# Se o template nao for encontrado
   ...  

Nesse exemplo o tratamento da exceção vai abrir arquivo 403.html não existir ocorrerá um erro e abrirá o CSRF_FAILRE_TEMPLATE contido acima no arquivo.

Divirta-se ^-^

fontes:
https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-CSRF_FAILURE_VIEW
http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/

Easy Django em Português

Boa tarde,

após pensar um pouco decidi escrever minhas postagens em Português pois dessa forma pretendo ajudar aqueles que aqui no Brasil encontram dificuldades com a documentação em Inglês.

Good afternoon,

after think while I've decided to write my posts at Portuguese with the intention of help those that here in Brazil have difficulty to the English documentation.