【发布时间】: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