Customizar as páginas de erro 404 e 500

456 views
Skip to first unread message

Mário Neto

unread,
Nov 26, 2008, 12:40:01 AM11/26/08
to django...@googlegroups.com
Oi pessoal,

Uso:
Django 1.0.2
Python 2.5
PostgreSQL 8.3
rWindows Vista

Estou fazendo o tutorial do site djangobrasil, e estou enganchado na parte de customizar as páginas de Erro 404 e 500
configurei para o DEBUG = False, coloquei as páginas 404.html e 500.html na raiz da minha pasta de templates,
e tentei criar as views, retirei as views, reestartei o servidor e nada, se alguem fez, quais os procedimentos?

Valeu! =)

Danilo Faustinoni Cabello

unread,
Nov 26, 2008, 6:15:01 AM11/26/08
to django...@googlegroups.com
2008/11/26 Mário Neto <macnd...@gmail.com>:

Opa, coisas possíveis?

Verifique seu TEMPLATE_DIRS, use sempre o caminho absoluto e não o
caminho relativo, caminho absoluto é o caminho desde a raiz do
sistema, por exemplo:
/home/user/jorge/projeto/templates # no linux
C:/projeto/templates # no windows

Verifique se está sem barra no final (não sei se pode dar problema mas
não é o padrão).

Se nada adiantar, tente fazer uma view personalizada pra ver se funciona[1].

[1] - http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views

Mário Neto

unread,
Nov 26, 2008, 8:52:07 AM11/26/08
to django...@googlegroups.com
Estou utilizando python para definir o caminho absoluto, coloquei:

no topo declarei:
import os
PROJECT_ROOT_PATH = os.path.dirname(os.path.abspath(__file__))

e em TEMPLATE_DIRS:
os.path.join(PROJECT_ROOT_PATH, 'templates'),

As páginas, 404.html e 500.html, estão na pasta templates dentro do meu projeto.
Na aplicação está tudo correndo bem, só não está renderizando as
páginas de erro customizadas.

Valeu!

Em 26/11/08, Danilo Faustinoni Cabello<danilo....@gmail.com> escreveu:

Danilo Faustinoni Cabello

unread,
Nov 26, 2008, 8:57:08 AM11/26/08
to django...@googlegroups.com
2008/11/26 Mário Neto <macnd...@gmail.com>:

>
> Estou utilizando python para definir o caminho absoluto, coloquei:
>
> no topo declarei:
> import os
> PROJECT_ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
>
> e em TEMPLATE_DIRS:
> os.path.join(PROJECT_ROOT_PATH, 'templates'),
>
> As páginas, 404.html e 500.html, estão na pasta templates dentro do meu projeto.
> Na aplicação está tudo correndo bem, só não está renderizando as
> páginas de erro customizadas.
tem outra coisa também, o seu DEBUG do settings.py está false?

pois o django sobrepõe os erros 404 e 500 sempre que o DEBUG está como
true, pois assim ele oferece stack trace entre outros detalhes do
erro.

Mário Neto

unread,
Nov 26, 2008, 9:03:39 AM11/26/08
to django...@googlegroups.com
Olha que estranho:

- No Internet Explorer, a página customizada só aparece uma vez.

- Já no Fire Fox deu certo.

Queria que funcionasse da mesma forma no Internet Explorer e como faço
para forçar um Erro 500 ?

Valeu!

Em 26/11/08, Mário Neto<macnd...@gmail.com> escreveu:

Vinicius Mendes

unread,
Nov 26, 2008, 9:05:40 AM11/26/08
to django...@googlegroups.com
Então me parece que seu problema não é o django, e sim a sua página customizada em si (HTML, Javascript e CSS)... Pois parece ser erro client side.

--------

Vinícius Mendes
Engenheiro de Computação
Meio Código - A peça que faltava para o seu código!

URL
http://www.meiocodigo.com


2008/11/26 Mário Neto <macnd...@gmail.com>

Mário Neto

unread,
Nov 26, 2008, 9:11:51 AM11/26/08
to django...@googlegroups.com
no arquivo 404.html tem apenas:

Erro 404

e no arquivo 500.html tem apenas:

Erro 500

nada mais.
Tem algum problema se eu não colocar nenhuma formatação html?
Também queria saber como forçar o Erro 500 para ver se vai funcionar
também no FF.

Em 26/11/08, Vinicius Mendes<vbme...@gmail.com> escreveu:

Vinicius Mendes

unread,
Nov 26, 2008, 9:16:30 AM11/26/08
to django...@googlegroups.com
Eu acredito que é só você dar raise em uma exception dentro da sua view... Tipo, forçar o erro mesmo...

Mário Neto

unread,
Nov 26, 2008, 9:20:40 AM11/26/08
to django...@googlegroups.com
eu apenas derrubei o PostgreSQL, ai deu o erro 500 =)

No FireFox funcionou mas no IE, nada ainda =/
O IE só renderiza as páginas padrões dele do erro 404 e 500.

Utilizo o IE7

Vinicius Mendes

unread,
Nov 26, 2008, 9:25:02 AM11/26/08
to django...@googlegroups.com
Tente colocar a estrutura completa do HTML...

Mário Neto

unread,
Nov 26, 2008, 9:44:48 AM11/26/08
to django...@googlegroups.com
Fiz uma estrutura básica em HTML para as páginas de erro.

<html>
<head>
<title>Erro 404</title>
</head>
<body>
<h1>Erro 404</h1>
<p>P&aacute;gina n&atilde;o encontrada</p>
</body>
</html>

Mesmo assim não está funcionando no IE7.

Jean Wainer

unread,
Nov 26, 2008, 10:12:56 AM11/26/08
to django...@googlegroups.com
2008/11/26 Mário Neto <macnd...@gmail.com>:

>
> O IE só renderiza as páginas padrões dele do erro 404 e 500.

Isso é comportamento padrão do IE, vc precisa ir nas opções dele e
tirar o "exibir paginas de erro amigáveis" ou algo do tipo. Ele
identifica o cabeçalho de erro (404, 500, etc) e exibe a sua própria
pagina. Provavelmente a parte do Django ta certa.

jean

Mário Neto

unread,
Nov 26, 2008, 11:15:00 AM11/26/08
to django...@googlegroups.com
Cara, foi isso mesmo, eu desabilitei la nas configurações para não
exibir as msgs amigáveis ai carregou as paginas de erro customizadas.

Mas tipo, o usuário final não vai fazer isso, e como a maioria das
pessoas usam o IE, não conseguiram visualizar as páginas de erro
customizadas para o site.

Tem alguma forma de exibir páginas de erro customizadas no IE sem ter
que fazer essas configurações?

Valeu!

Em 26/11/08, Jean Wainer<wai...@gmail.com> escreveu:

Jean Wainer

unread,
Nov 26, 2008, 11:22:48 AM11/26/08
to django...@googlegroups.com
A única forma que imagino é de algum jeito forçar o site a exibir
cabeçalho de sucesso (201?) ao invés de erro.. Mas eu não recomendaria
isso não..

Ou talvez se vc identificasse o user-agent e mostrasse uma página de
acordo... Talvez existem outras possibilidades, não sei..

Jean

2008/11/26 Mário Neto <macnd...@gmail.com>:

Danilo Faustinoni Cabello

unread,
Nov 26, 2008, 11:30:41 AM11/26/08
to django...@googlegroups.com
2008/11/26 Jean Wainer <wai...@gmail.com>:

>
> A única forma que imagino é de algum jeito forçar o site a exibir
> cabeçalho de sucesso (201?) ao invés de erro.. Mas eu não recomendaria
> isso não..
O mais simples realmente seria fazer isso, trocando os handlers
padrões por handler próprios onde sempre retorna um HTTP 200 porém com
a mensagem explicando que a página não foi encontrada.

Mário Neto

unread,
Nov 26, 2008, 1:16:01 PM11/26/08
to django...@googlegroups.com
Desculpe mas estou começando agora com o Django e acabei de ter outra dúvida.

Como eu trocaria os handlers padrões por handlers próprios que
retornam um HTTP 200?

Obg!

Em 26/11/08, Danilo Faustinoni Cabello<danilo....@gmail.com> escreveu:
>

Felipe Zorzo

unread,
Nov 26, 2008, 1:24:47 PM11/26/08
to django...@googlegroups.com


2008/11/26 Mário Neto <macnd...@gmail.com>

Não sei se isso ajuda, mas quando acontece um erro 4040, o Django chama o django.views.defaults.page_not_found, e esse método retorna um HttpResponseNotFound[1]

Creio eu que uma boa alternativa seria sobrescrever o método page_not_found, informações em [2]

[1] http://code.djangoproject.com/browser/django/branches/releases/1.0.X/django/views/defaults.py
[2] http://docs.djangoproject.com/en/dev/topics/http/views/#the-404-page-not-found-view

--
Felipe Bernardo Zorzo

Danilo Faustinoni Cabello

unread,
Nov 26, 2008, 3:05:35 PM11/26/08
to django...@googlegroups.com
2008/11/26 Mário Neto <macnd...@gmail.com>:

>
> Desculpe mas estou começando agora com o Django e acabei de ter outra dúvida.
>
> Como eu trocaria os handlers padrões por handlers próprios que
> retornam um HTTP 200?
>
> Obg!

Coloque o seu handler específico no seu arquivo urls.py como exibido
na documentação [1].

E ao invés de retornar um HttpResponseNotFound, você retorna um
HttpResponse normal, como por exemplo um render_to_response.

Exemplo teórico:

em seu urls.py:

handler404 = 'meusite.views.pagina_nao_encontrada'


em seu views.py

def pagina_nao_encontrada(request):
...
return render_to_response('404.html', dict_com_dados)

[1] - http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views

Reply all
Reply to author
Forward
0 new messages