【问题标题】:Blog matching query does not exist博客匹配查询不存在
【发布时间】:2021-12-27 20:09:53
【问题描述】:

我正在使用 slug 来显示我的博客详细信息页面。

这里是models.py

class Blog(models.Model):
    author=models.ForeignKey(User,on_delete=models.CASCADE,related_name='post_author')
    blog_title=models.CharField(max_length=264,verbose_name='Put a Title')
    slug= models.SlugField(max_length=264,unique=True)
    blog_content=models.TextField(verbose_name='what is on your mind?')
    blog_image=models.ImageField(upload_to='blog_images',verbose_name='Image')
    publish_date=models.DateTimeField(auto_now_add=True)
    update_date=models.DateTimeField(auto_now=True)
    class Meta:
        ordering = ('-publish_date',)
    
    def __str__(self):
        return self.blog_title+'  From :'+str(self.author)

博客列表views.py

def Creating_blog(request):
    form=BlogForm()
    if User.is_authenticated:
        if request.method=='POST':
                form=BlogForm(request.POST,request.FILES)
                blog_obj=form.save(commit=False)
                blog_obj.author=request.user
                title=blog_obj.blog_title
                blog_obj.slug = title.replace(' ','-') + '-'+ str(uuid.uuid4())
                blog_obj.save()
                return redirect('bloglist')
    return render(request,'blogs/createblog.html',{'form':form})
     

博客详情views.py

def blog_details(request, slug):
    if User.is_authenticated:
        blog= Blog.objects.get(slug=slug)
        already_liked=Likes.objects.filter(blog=blog,user=request.user)
        if already_liked:
            like=True
        else:
            like=False
        comments=Comment.objects.filter(blog=blog)
        commet_form=CommentForm()
        if request.method=='POST':
          commet_form=CommentForm(request.POST)
        if commet_form.is_valid():
            comment=commet_form.save(commit=False)
            comment.user=request.user
            comment.blog=blog
            comment.save()
            return HttpResponseRedirect(reverse('blog_details',kwargs={'slug':slug}))
        return render(request,'blogs/blogdetails.html',context={'blog':blog,'comment_form':commet_form,'comments':comments,'like':like})
    else:
        HttpResponseRedirect(reverse('login'))

urls.py

from django.urls import path
from .import views

urlpatterns = [
    path('write/',views.Creating_blog,name='creatingblogs'),
    path('bloglist/',views.BlogList.as_view(),name='bloglist'),
    path('details/<slug:slug>/',views.blog_details,name="blog_details")
]

blog_list 页面 html 锚标记代码

<div class="col-sm-8">
        <p>{{blog.blog_content|capfirst|truncatewords:100}}<a href="{% url 'blog_details' slug=blog.slug|slugify %}">Read More</a></p>
    </div>

我可以看到博客列表页面,但是当它尝试查看博客详细信息时,它会显示此错误

DoesNotExist at /details/big-time-space-rarity-9a3d63b4-634a-11ec-9db9-9c7bef6a0e62/
Blog matching query does not exist.

我尝试添加一些新博客,但它显示的结果相同。请帮我解决这个问题,并询问我是否需要任何描述。提前致谢。

【问题讨论】:

  • views.blog_details 中的urs.py 是什么?你能分享一下这个视图的代码吗?
  • @OleksiiTambovtsev 显示博客详细信息页面代码。这不是将我带到博客详细信息页面,这就是问题所在。
  • 我完全理解你的问题 :) 顺便问一下,你能与我们分享这个视图的代码views.blog_details 以确保它不是问题吗?
  • 请向我们展示您的详细视图。我很确定问题就在那里。当您传递博客的 slug 时,您基本上必须告诉详细视图按 slug 搜索相应的博客(django 默认使用 pk )。除此之外,我强烈推荐基于类的视图。您可能不需要模板中的 slugify 标记,并检查 slugify 函数来最初创建您的 slug。
  • @R.Steigmeier 我知道了,但我熟悉基于函数的视图,这就是原因。我正在放博客详情视图

标签: python django django-queryset


【解决方案1】:

错误发生在行内blog_details视图内:

blog= Blog.objects.get(slug=slug)

您应该调试这部分代码并确定为什么您无法通过 slug 找到 Blog 实例。

【讨论】:

    【解决方案2】:

    这是一个相当疯狂的猜测,因为我没有复制你的代码,但我认为你的 slug 似乎有问题。

    首先更改以下行:

    blog_obj.slug = slugify(title + '-' + str(uuid.uuid4()))
    

    见:https://docs.djangoproject.com/en/4.0/ref/utils/#django.utils.text.slugify

    然后更改以下内容:

    <p>{{blog.blog_content|capfirst|truncatewords:100}}<a href="{% url 'blog_details' slug=blog.slug %}">Read More</a></p>
    

    (去掉模板中的slugify)

    让我知道这是否有效。此外,如果您在基于类的视图方面需要帮助,请告诉我们。

    【讨论】:

      猜你喜欢
      • 2017-11-08
      • 2014-09-22
      • 1970-01-01
      • 2011-09-26
      • 2012-05-10
      • 2013-03-02
      • 2021-12-10
      • 2021-05-07
      • 2017-01-12
      相关资源
      最近更新 更多