Seguindo exatamente o tutorial encontrado aqui , não consigo criar uma página de erro 500 ou 404 personalizada. Se eu digitar um url incorreto, a página me mostra a página de erro padrão. Há algo que eu deveria verificar para evitar que uma página personalizada seja exibida?
Diretórios de arquivos:
mysite/
mysite/
__init__.py
__init__.pyc
settings.py
settings.pyc
urls.py
urls.pyc
wsgi.py
wsgi.pyc
polls/
templates/
admin/
base_site.html
404.html
500.html
polls/
detail.html
index.html
__init__.py
__init__.pyc
admin.py
admin.pyc
models.py
models.pyc
tests.py
urls.py
urls.pyc
view.py
views.pyc
templates/
manage.py
em mysite / settings.py eu habilitei estes:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
#....
TEMPLATE_DIRS = (
'C:/Users/Me/Django/mysite/templates',
)
em mysite / polls / urls.py:
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
Posso postar qualquer outro código necessário, mas o que devo mudar para obter uma página de erro 500 personalizada se usar um URL incorreto?
Editar
SOLUÇÃO: eu tinha um adicional
TEMPLATE_DIRS
em meu settings.py e isso estava causando o problema
Respostas:
Em seu principal,
views.py
adicione sua própria implementação personalizada das duas visualizações a seguir e apenas configure os modelos 404.html e 500.html com o que deseja exibir.Com esta solução, nenhum código personalizado precisa ser adicionado ao
urls.py
Aqui está o código:
Atualizar
handler404
ehandler500
são exportadas variáveis de configuração de string Django encontradas emdjango/conf/urls/__init__.py
. É por isso que a configuração acima funciona.Para fazer com que a configuração acima funcione, você deve definir as seguintes variáveis em seu
urls.py
arquivo e apontar as variáveis exportadas do Django para o caminho do Python da string de onde essas visualizações funcionais do Django são definidas, como:Atualização para Django 2.0
As assinaturas para visualizações do manipulador foram alteradas no Django 2.0: https://docs.djangoproject.com/en/2.0/ref/views/#error-views
Se você usar visualizações como acima, o handler404 falhará com a mensagem:
Nesse caso, modifique suas opiniões da seguinte forma:
fonte
500 template
não renderizarequest.user
porque está relatando um erro de servidor 500, então o servidor não é capaz de servir nada.Resposta oficial:
Aqui está o link para a documentação oficial sobre como configurar visualizações de erro personalizadas:
https://docs.djangoproject.com/en/stable/topics/http/views/#customizing-error-views
Diz para adicionar linhas como essas em seu URLconf (configurá-las em qualquer outro lugar não terá efeito):
Você também pode personalizar a visualização do erro CSRF, modificando a configuração
CSRF_FAILURE_VIEW
.Manipuladores de erro padrão:
Vale a pena ler a documentação dos manipuladores de erro padrão,
page_not_found
,server_error
,permission_denied
ebad_request
. Por padrão, eles usam esses modelos se eles podem encontrá-los, respectivamente:404.html
,500.html
,403.html
, e400.html
.Então, se tudo o que você quer fazer é criar belas páginas de erro, basta criar esses arquivos em um
TEMPLATE_DIRS
diretório, você não precisa editar o URLConf de forma alguma. Leia a documentação para ver quais variáveis de contexto estão disponíveis.No Django 1.10 e posterior, a visualização de erro CSRF padrão usa o modelo
403_csrf.html
.Peguei vocês:
Não se esqueça de que
DEBUG
deve ser definido como False para que funcionem, caso contrário, os manipuladores de depuração normais serão usados.fonte
Adicione essas linhas em urls.py
urls.py
e implementar nossas visualizações personalizadas em views.py.
views.py
fonte
handler400
apenas para sobrescreverhandler400 = 'myapp.views.bad_request'
?render_to_response
. Dos documentos: "não é recomendado e provavelmente será descontinuado no futuro."render_to_response
vai ser descontinuado, consulte o seguinte (use emrender
vez disso): stackoverflow.com/questions/44228397/…Na página que você referiu:
Portanto, acredito que você precisa adicionar algo assim ao seu urls.py:
e semelhante para handler500.
fonte
urlpatterns = ...
linha, adicione uma linha que digahandler500 = 'views.handle500'
e, em seguida, adicione umdef handle500(request):
ao seu views.py que exibe seu 500.html.Se tudo o que você precisa é mostrar páginas personalizadas que têm algumas mensagens de erro sofisticadas para o seu site quando
DEBUG = False
, então adicione dois modelos chamados 404.html e 500.html no seu diretório de modelos e ele irá selecionar automaticamente essas páginas personalizadas quando um 404 ou 500 é gerado.fonte
'DIRS': [os.path.join(BASE_DIR, '<project_name>/templates')]
em sua lista de TEMPLATES nosettings.py
.No Django 2. * você pode usar esta construção em views.py
Em settings.py
Em urls.py
Normalmente eu crio default_app e lido com erros de todo o site, processadores de contexto nele.
fonte
exception
?locals()
? O arquivo só mostrapass
.settings.py:
e apenas adicione suas páginas
404.html
e500.html
na pasta de modelos. remover404.html
e500.html
de modelos no aplicativo de enquetes.fonte
raise Http404('msg')
: stackoverflow.com/a/37109914/895245{{ request_path }}
também está disponível.Cometa um erro, na página de erro, descubra de onde django está carregando os modelos. Quero dizer, a pilha de caminhos. No template_dir base, adicione essas páginas html 500.html , 404.html . Quando esses erros ocorrerem, os respectivos arquivos de modelo serão carregados automaticamente.
Você também pode adicionar páginas para outros códigos de erro, como 400 e 403 .
Espero esta ajuda !!!
fonte
No Django
3.x
, a resposta aceita não funcionará porquerender_to_response
foi removida completamente, assim como mais algumas mudanças foram feitas desde a versão para a qual a resposta aceita funcionou.Algumas outras respostas também estão lá, mas estou apresentando uma resposta um pouco mais clara:
Em seu
urls.py
arquivo principal :No
yourapp/views.py
arquivo:Certifique-se de ter importado
render()
noyourapp/views.py
arquivo:Nota lateral:
render_to_response()
foi descontinuado no Django2.x
e foi completamente removido na versão3.x
.fonte
Como uma única linha (para a página 404 genérica):
fonte
Isso funciona no django 2.0
Certifique-se de incluir seu personalizado
404.html
dentro da pasta de modelos de aplicativos.fonte
Django 3.0
aqui está o link para personalizar visualizações de erros
aqui está o link como renderizar uma visualização
no
urls.py
(o principal, na pasta do projeto), coloque:e nesse aplicativo (
my_app_name
) coloqueviews.py
:NOTA:
error/404.html
é o caminho se você colocar seus arquivos na pasta de modelos de projetos (não nos aplicativos),templates/errors/404.html
portanto, coloque os arquivos onde quiser e escreva o caminho correto.NOTA 2: Depois de recarregar a página, se você ainda vir o modelo antigo, altere-o
settings.py
DEBUG=True
, salve-o e depois novamente emFalse
(para reiniciar o servidor e coletar os novos arquivos).fonte
DEUB=False
seus arquivos estáticos, pode não ser veiculado, fazendo com que você não possa visualizar as alterações do modelo de erro personalizado. Use./manage.py runserver --insecure
para forçar o Django a servi-los de qualquer maneira.Nenhuma visão adicional é necessária. https://docs.djangoproject.com/en/3.0/ref/views/
Basta colocar os arquivos de erro na raiz do diretório de modelos
E ele deve usar sua página de erro quando a depuração for False
fonte
Tente mover seus modelos de erro para
.../Django/mysite/templates/
?Tenho certeza sobre este, mas acho que eles precisam ser "globais" para o site.
fonte