python - 找不到 Django 404 页面 blog.views.post_detail
问题描述
我是 django 的新手,我使用 mysql。我按照教程用 django 制作博客。我制作了列表和详细博客,但是当我单击博客的详细帖子时,错误出现 Page Not Found (404) Raised by: blog.views.post_detail。这些是我的网站 urls.py、博客 urls.py、models.py 和 views.py。
网站 urls.py:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^blog/', include('blog.urls',
namespace='blog',
app_name='blog')),
]
博客网址.py:
from django.conf.urls import url,include
from . import views
urlpatterns = [
url(r'^$', views.PostListView.as_view(),name='post_list'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
r'(?P<post>[-\w]+)/$',
views.post_detail,
name='post_detail'),
]
模型.py:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
class PublishedManager(models.Manager):
def get_queryset(self):
return super(PublishedManager,self).get_queryset()\
.filter(status='published')
class Post(models.Model):
STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'),)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,unique_for_date='publish')
author = models.ForeignKey(User,related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10,choices=STATUS_CHOICES,default='draft')
objects = models.Manager()
published = PublishedManager()
class Meta:
ordering=('-publish',)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:post_detail',
args=[self.publish.year,
self.publish.strftime('%m'),
self.publish.strftime('%d'),
self.slug])
视图.py:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render,get_object_or_404
from .models import Post
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.views.generic import ListView
def post_list(request):
object_list = Post.published.all()
paginator = Paginator(object_list,3)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request,'blog/post/list.html',{'page':page,'posts':posts})
class PostListView(ListView):
queryset = Post.published.all()
context_object_name = 'posts'
paginate_by = 3
template_name = 'blog/post/list.html'
def post_detail(request,year,month,day,post):
post = get_object_or_404(Post,slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day)
return render (request,
'blog/post/detail.html',
{'post':post})
解决方案
我认为也许您应该使用“pk”作为参数,而不是您拥有的复杂网址
def post_detail(request, pk):
post = get_object_or_404(Post,pk=pk)
return render (request,
'blog/post/detail.html',
{'post':post})
urlpatterns = [
url(r'^$', views.PostListView.as_view(),name='post_list'),
url(r'^(?P<pk>[0-9]+)/$',
views.post_detail,
name='post_detail'),
]
只是不要把没有人喜欢的事情复杂化
如果你仍然希望它成为你的方式,试着从一开始就让它变得超级简单,然后添加你的东西,看看到底出了什么问题。
从一开始就使用 id,然后尝试添加一年,然后是一个月,然后是其他东西。你会发现哪里不对
推荐阅读
- python - “意外缩进”或“对象没有属性‘编译’”错误
- mongodb - 无法使用 golang 更新 Mongo 中子元素的属性
- swift - 快照值作为 int 导致崩溃
- c# - 找不到我的 xml 文件的路径
- julia - Julia:如何查看去向量化的代码?
- javascript - 如何围绕现有的 Javascript 库创建 Angular 包装器?
- javascript - 使用一段深度对象键作为局部变量
- docker - 以编程方式检查 Docker 容器进程是否以非零状态结束
- java - 修改流阅读器类以从文件而不是 System.in 中读取
- ios - Swift为视图背景绘制弧线