Обработка ошибок 404/500 в Джанго - PullRequest
0 голосов
/ 29 марта 2019

Есть небольшая проблема с моим приложением Django: мой проект - это блог с несколькими постами.Вы можете получить доступ к первому сообщению, набрав localhost:8000/blog/post/1 в строке URL.Чтобы прочитать пост нет.X вы должны набрать localhost:8000/blog/post/X.Поэтому мне нужно отобразить пользовательскую страницу «Ошибка 404» при запросе несуществующего сообщения (например, localhost:8000/blog/post/32, если доступно только 3 сообщения).Проблема заключается в том, что вместо выдачи ошибки 404 выдается ошибка Ошибка сервера (500) , однако я никогда не кодировал что-либо, чтобы выдать такую ​​ошибку.Вот соответствующие части кода, но не мой полный код, который я считаю бесполезным. Имя проекта red_pillers, имя приложения blog.

в red_pillers / settings.py

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

red_pillers / urls.py

from django.contrib import admin
from django.urls import path, re_path, include
from django.conf.urls import handler404

from . import views

handler404 = 'red_pillers.views.handler404'

urlpatterns = [
    re_path('^blog/', include('blog.urls')),
    re_path('^$', views.home),
    re_path('^admin/', admin.site.urls),
]

red_pillers / views.py

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')


def handler404(request):
    return render(request, 'errors/404.html', {}, status=404)

blog / pycode / post.py

from django.http import Http404

class Post:

    POSTS = [
        {'id': 1, 'title': 'First Post', 'body': 'This is my first post'},
        {'id': 2, 'title': 'Second Post', 'body': 'This is my second post'},
        {'id': 3, 'title': 'Third Post', 'body': 'This is my third post'},
    ]

    @classmethod
    def all(cls):
        return cls.POSTS

    @classmethod
    def find(cls, id):
        try:
            return cls.POSTS[int(id) - 1]
        except:
            raise Http404('Error 404...')

РЕДАКТИРОВАТЬ: добавлено больше кода

blog / urls.py

from django.urls import path, re_path

from . import views

urlpatterns = [
    re_path('^$', views.index),
    re_path('^posts/(?P<id>[0-9]+)$', views.show),
]

blog / views.py

from django.shortcuts import render

from .pycode.post import Post

def index(request):
    posts = Post.all()
    return render(request, 'blog/index.html', {'posts': posts})


def show(request, id):
    post = Post.find(id)
    return render(request, 'blog/show.html', {'post': post})

1 Ответ

0 голосов
/ 29 марта 2019

Используйте get_object_or_404 , который будет перенаправлять вас, если он не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...