喜欢帖子时博客消失

时间:2019-02-18 13:39:00

标签: python django

代码可以正常工作,但问题是在我喜欢发布而不是点赞按钮之后,更改整个具有帖子的for循环停止。也就是说,除了用户名之外,没有显示任何其他内容。服务器不会抛出任何特定错误,只是不会显示for循环。我觉得渲染部分存在问题,但我不确定它到底有什么问题


下面是我的文件


views.py

__init__

models.py

from django.shortcuts import render,get_object_or_404
from django.views.generic import ListView
from .models import Blog
from django.http import HttpResponseRedirect

class BlogsList(ListView):
    model=Blog
    template_name='blog/home.html'
    context_object_name='blogs'
    ordering=['-date_posted']



def like_post(request, blog_id):
    post = get_object_or_404(Blog, id=blog_id)
    is_liked=False
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        is_liked=False
    else:
        post.likes.add(request.user)
        is_liked=True
    context={
    'is_liked':is_liked
    }   
    return render(request, 'blog/home.html', context)

urls.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse 

class Blog(models.Model):
    title=models.CharField(max_length=100)
    content=models.TextField()
    date_posted=models.DateTimeField(default=timezone.now)
    author=models.ForeignKey(User, on_delete=models.CASCADE)
    likes=models.ManyToManyField(User,related_name='likes',blank=True)
    def __str__(self):
        return self.title

    def get_absolute_url():
        return reverse('blog-home')

]

和home.html

from django.urls import path
from . import views 

urlpatterns=[
path('',views.BlogsList.as_view(),name='blog-home'),
path('<int:blog_id>/like/', views.like_post, name='like_post')

2 个答案:

答案 0 :(得分:1)

您可以直接使用重定向快捷方式而不是render,因为render不会显示所有帖子。您可以将所有帖子传递给类似视图,也可以直接通过重定向来调用列表视图。

SomeInterface

答案 1 :(得分:1)

当您单击“赞”按钮时,您的代码正在like_post视图中呈现。在这种情况下,上下文没有称为博客的数据。在like_post的末尾,您应该重定向到BlogsListView而不是返回HttpResponse。

您可以使用Django快捷键功能redirect来执行此操作。

from django.shortcuts import redirect
#...
#...
#... your code
def like_post(request, blog_id):
    post = get_object_or_404(Blog, id=blog_id)
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
    else:
        post.likes.add(request.user)
    return redirect('blog-home')

此外,您需要想出一些方法来在家中获得is_liked上下文。考虑查看文档here