我该如何修复Django中的一堆无反向数学错误

oyxsuwqo  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(99)

我读了所有关于没有反向匹配错误,但没有什么改变我做了一切,我的任务是“在与被过滤的帖子列表相关的视图中,如何根据考虑发布的时间过滤帖子。这个过滤器应该是这样的,它需要考虑的时间为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>

字符串

siotufzp

siotufzp1#

您将Queryset作为posts = blog_Post.objects.filter(published_date__lte=timezone.now(), status=1, pk=pid)发送,尽管可能只有一个,但它仍然是一个Queryset,需要对其进行评估。例如:

{% for p in post %}
    <li><a href="{% url 'blog:single' pid=p.id %}">Blog Single</a></li>
{% endfor %}

字符串
或者,您可以使用post = blog_Post.objects.get(published_date__lte=timezone.now(), status=1, pk=pid),它将返回一个示例,尽管我会确保该对象确实存在,所以也许可以这样做

post = blog_Post.objects.get_object_or_404(published_date__lte=timezone.now(), status=1, pk=pid)

  • 底线**

这条线

<a href="{% url 'blog:single' pid=post.id %}">


很可能post.id为none,这就是导致错误的原因。

tp5buhyn

tp5buhyn2#

看起来你在代码中做的一切都是正确的。NoReverseMatch错误发生在Django无法找到与您在任何已安装应用的URL中提供的URL匹配的URL模式时。当无法根据提供的参数识别URLconf中的匹配URL时,django.core.urlresolvers会引发此错误。
此错误的一个可能原因是传递给base.html文件中的url模板标记的参数与urls.py文件中的URL模式所需的参数不匹配。例如,在base.html文件中,您有以下行:

<li><a href="{% url 'blog:single' pid=post.id %}">Blog Single</a></li>

字符串
这一行将一个值为www.example.com的关键字参数pid传递post.id给名为'single'的URL模式。但是,在您的urls.py文件中,名为'single'的URL模式需要一个名为pid的整数参数,如下所示:

path('single/<int:pid>', blog_single, name='single')


如果www.example.com的值post.id不是整数,则可能导致NoReverseMatch错误。您可以尝试打印出post.id的值,看看它是否是一个整数。

相关问题