我是Django和Python的初學者。我正在嘗試爲我的學習創建一個簡單的博客。我想確保何時數據庫無法訪問,那麼網頁顯示404模板。下面是我的views.py文件,但我不斷收到500模板。Django分頁錯誤處理
from django.shortcuts import render
from django.http import Http404
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from blog.models import Post, About
def index(request):
global posts
try:
all_blog_posts = Post.objects.all()
published_blog_posts = all_blog_posts.filter(published=True)
except Post.DoesNotExist:
raise Http404('No Posts.')
paginator = Paginator(published_blog_posts, 1)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
try:
about = About.objects.get(id=1)
except About.DoesNotExist:
raise Http404('No About.')
context = {'posts': posts, 'about': about}
return render(request, 'blog/index.html', context)
如果我把調試上,然後我得到下面的異常值ProgrammingError,
relation "blog_post" does not exist
LINE 1: ...post"."post_author", "blog_post"."published" FROM "blog_post...
我認爲分頁是試圖在數據庫上運行原始查詢,但無法找到該表作爲數據庫無法達到。我可能在這裏錯了。
我的models.py是,
from django.db import models
class Post(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
post_title = models.CharField(max_length=64)
post_body = models.TextField()
post_author = models.CharField(max_length=16)
published = models.BooleanField()
class About(models.Model):
summary = models.TextField()
github_url = models.URLField(max_length=200)
twitter_url = models.URLField(max_length=200)
linkedin_url = models.URLField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
我的urls.py是
from django.conf.urls import patterns, url
from blog import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
)
的應用程序的名稱是博客。我正在使用Django 1.8和Python 2.7.6。任何幫助將不勝感激。
我想要網站拋出404即使數據庫根本不存在。這就是爲什麼我沒有創建數據庫。 – SGL
這與HTTP的標準不一致,明確指出404代表未找到頁面:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10。html 但是,如果你想這樣做,你可以簡單地捕獲任何異常(不僅DoesnotExist)並拋出404 – danielfranca