>source

전문 코더와 함께 하루 동안이 문제를 디버깅하려고했지만 여기서 문제를 식별 할 수 없었습니다. 좋아요 버튼은 완벽하게 작동하며 총 좋아요 수를 조회 할 수 있지만 박수 버튼이 좋아요로 변경되지 않고 이유가 확실하지 않습니다. 오류가 html 줄에 있다고 생각합니다.

{% if liked and post.slug == blog_post.slug %} Unlike {% else %} Like {% endif %}

또는 장고 라인 :

context["liked"] = True if blog_post.likes.filter(id=request.user.id).exists() else False

여기에서 문제를 확인할 수 있다면 대단히 감사합니다!

views.py

def home_feed_view(request, *args, **kwargs):
    context = {}
    blog_posts = BlogPost.objects.all()
    context['blog_posts'] = blog_posts 
    if request.method=="POST":
        slug=request.POST["submit_slug"]
        blog_post = get_object_or_404(BlogPost, slug=slug)
        context['blog_post'] = blog_post
        context["liked"] = True if blog_post.likes.filter(id=request.user.id).exists() else False
        context['total_likes'] = blog_post.total_likes()
    type_of_post = TypeofPostFilter(request.GET, queryset=BlogPost.objects.all())
    context['type_of_post'] = type_of_post
    paginated_type_of_post = Paginator(type_of_post.qs, 13 )
    page = request.GET.get('page')
    post_page_obj = paginated_type_of_post.get_page(page)
    context['post_page_obj'] = post_page_obj
    return render(request, "HomeFeed/snippets/home.html", context)
def LikeView(request, slug):
    context = {}
    user = request.user
    if not user.is_authenticated:
        return redirect('must_authenticate')
    post = get_object_or_404(BlogPost, slug=slug)
    liked = False
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        liked = False
    else:
        post.likes.add(request.user)
        liked = True
    return redirect(request.META.get('HTTP_REFERER', ''))

<td class="table-primary">
   <form action="{% url 'HomeFeed:like_post' post.slug %}" method="POST"> 
       {% csrf_token %} 
              
       <button type="submit" name="submit_slug" value="{{ post.slug }}" class='btn btn-primary btn-sm'>
       {% if liked and post.slug == blog_post.slug %} Unlike {% else %} Like 
       {% endif %}
       </button> 
       {{ post.total_likes }} Clap {{ post.total_likes|pluralize }}
         
   </form>
</td>

urls.py

path('<slug>/like/', LikeView, name='like_post'),

models.py

class BlogPost(models.Model):
    chief_title = models.CharField(max_length=50, null=False, blank=False)
    body = models.TextField(max_length=5000, null=False, blank=False)
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='blog_posts', blank=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    slug = models.SlugField(blank=True, unique=True)


  • 답변 # 1

    좋아, 여기에 모델이 존재하는지 확인하는 훨씬 더 간단한 방법이 있습니다. m2m 다른 모델의 필드 :

    HTML

    {% if request.user in blog_post.likes.all %} Unlike {% else %} Like {% endif %}
    
    

    전망

    if request.user in blog_post.likes.all():
    
    

    추신모델에서 필드 이름을 바꿔야합니다. likes ...에 likers 그것과의 관계 이후 User 모델이 아닌 Like 모델 :)

    편집하다

    따라서 단일 페이지에 게시물 목록과 그에 따른 유사 버튼을 쉽게 표시하려면 템플릿에서 다음을 수행하고 싶습니다.

    views.py

    def posts(request): 
        blog_posts = BlogPost.objects.all()
        return render(request, 'index.html', {'blog_posts': blog_posts})
    
    

    index.html

    {% for post in blog_posts %}
        <h1>{{ post.chief_title }}</h1>
        <p>{{ post.author }} says: </p>
        <b>{{ post.body }}</b>
        <p> This post is liked by: </p>
        {% for user in post.likes %}
            <p>{{ user.username }}</p>
        {% endfor %}
        
        {% if request.user not in post.likes.all %} 
            <a href="{% url 'like_post' post.slug %}">Like</a>
        {% else %} 
            <a href="{% url 'like_post' post.slug %}">Unlike</a>
        {% endif %}
    {% endfor %}
    
    

관련 자료

  • 이전 uiimagepickercontroller - 갤러리 스위프트에서 선택한 비디오를 가져올 수 없습니다
  • 다음 javascript - FullPage.js 탐색