我读了所有关于没有反向匹配错误,但没有什么改变我做了一切,我的任务是“在与被过滤的帖子列表相关的视图中,如何根据考虑发布的时间过滤帖子。这个过滤器应该是这样的,它需要考虑的时间为published_date部分,并比较它与当前时间,如果它是过去的当前时间,它应该被显示,否则不。
urls.py
from django.urls import path, include
from blog.views import *
app_name = 'blog'
urlpatterns = [
path('', blog_view, name='index'),
path('single/<int:pid>', blog_single, name='single')
]
views.py
from django.shortcuts import render, get_object_or_404
from blog.models import blog_Post
from django.utils import timezone
# Create your views here.
def blog_view(request, pid):
posts = blog_Post.objects.filter(published_date__lte=timezone.now(), status=1, pk=pid)
context = {'posts': posts}
return render(request, "blog/blog-home.html",context)
def blog_single(request, pid):
blog_object = get_object_or_404(blog_Post, pk=pid)
blog_object.counted_views += 1
blog_object.save()
return render(request, "blog/blog-single.html", {'posts':blog_object})]
base.html
<li><a href="{% url 'blog:index' %}">Blog Home</a></li
<li><a href="{% url 'blog:single' pid=post.id %}">Blog Single</a></li>
字符串
2条答案
按热度按时间siotufzp1#
您将Queryset作为
posts = blog_Post.objects.filter(published_date__lte=timezone.now(), status=1, pk=pid)
发送,尽管可能只有一个,但它仍然是一个Queryset,需要对其进行评估。例如:字符串
或者,您可以使用
post = blog_Post.objects.get(published_date__lte=timezone.now(), status=1, pk=pid)
,它将返回一个示例,尽管我会确保该对象确实存在,所以也许可以这样做型
这条线
型
很可能
post.id
为none,这就是导致错误的原因。tp5buhyn2#
看起来你在代码中做的一切都是正确的。
NoReverseMatch
错误发生在Django无法找到与您在任何已安装应用的URL中提供的URL匹配的URL模式时。当无法根据提供的参数识别URLconf中的匹配URL时,django.core.urlresolvers
会引发此错误。此错误的一个可能原因是传递给base.html文件中的url模板标记的参数与urls.py文件中的URL模式所需的参数不匹配。例如,在base.html文件中,您有以下行:
字符串
这一行将一个值为www.example.com的关键字参数pid传递post.id给名为'single'的URL模式。但是,在您的urls.py文件中,名为'single'的URL模式需要一个名为pid的整数参数,如下所示:
型
如果www.example.com的值post.id不是整数,则可能导致NoReverseMatch错误。您可以尝试打印出post.id的值,看看它是否是一个整数。