Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

erro 404 customizada

como é possivel customizar um erro 404 com uma pagina que usa tamplate e as templates tag do django

8 respostas

Oi amigão, só para confirmar se eu peguei o que você quer antes de responder: no lugar daquela página padrão do Django cheia de informação você quer usar uma página 404 específica sua, com menos informações e que ainda faça uso do seus templates, certo?

solução!

Bom, é meio chatinho alterar essa página, vou explicar passo a a passo:

1) Você precisa criar a página connectedin/usuarios/templates/404.html. Vou criar uma simples para início de conversa. Vou pegar carona no template base_usuario:

{% extends "base_usuario.html" %}

{% block body %}

    <h1>Página não encontrada</h1>

{% endblock %}

2) Isso ainda não é suficiente. Você precisa editar connectedin/connectedin/urls.py. Adicione este código no FINAL do arquivo:

from django.conf import settings
from django.template.response import TemplateResponse 

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^', TemplateResponse, {'template': '404.html'}))

Pronto. Agora, se você acessar uma URL que não existe, será exibida a nova página de erro. Essa é a solução mais fácil, existem outras maneiras mais complicadas, mas tudo depende do que você quer no final. Lembre-se que sempre qu você quer sair do padrão do Django você terá que "brigar com ele".

valeu cara, funcionou ! Mas eu fiquei um pouco preocupado com o

''' if settings.DEBUG '''

isso nao vai ser problema quando for para produção ?

Não. Isso é só para permitir que vc use sua página em modo debug. Em modo produção ele já aceita por padrão.. leia a documentação do Django que lá ele fala sobre a pana 404 e o debug.

E não esquece que toda vez que você sai da convenção do Django sofrerá bastante.

Ola Flavio, feito isso eu perdi o acesso a outras aplicações

urlpatterns = patterns('',
    url(r'^', include('website.urls') ),
    url(r'^admin/', include(admin.site.urls) ), 
    url(r'^courses/', include('courses.urls') )
)

o admin e o courses já não estão mais acessiveis... eles também caem na regra do 404 .

Você colocou o código no lugar certo? Ele tem que ser a última rota, se ela for definida antes das demais, não vai funcionar.

Mostra para mim o código do seu connectedin/connectedin/views.py.

Obrigado mais uma vez Flávio, alterei para ultima rota e tudo voltou a funcionar !

Excelente! Mas você entende a razão de agora funcionar? O Django sempre tenta resolver as rotas na ordem em que foram definidas. Como esta é a última, ele só a processará se nenhuma outra tiver sido aplicada.

Bom estudo Gilberto!