Есть небольшая проблема с моим приложением 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})