como é possivel customizar um erro 404 com uma pagina que usa tamplate e as templates tag do django
como é possivel customizar um erro 404 com uma pagina que usa tamplate e as templates tag do django
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?
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!