Почему я передал контекст is_liked в шаблоне, но не могу выполнить {% if is_liked%} в шаблоне? - PullRequest
0 голосов
/ 17 июня 2020

Я передал is_liked контексту, но оператор {% if is_liked%} не выполнялся в шаблоне, я подозреваю, что это проблема context_objects_name, но я не могу понять. Пожалуйста, помогите мне с этим. Спасибо

домой. html (упрощенный шаблон)

{% for post in posts %}
        <form action="{% url 'like_post' %}" method="post">
            {% csrf_token %}
            {% if is_liked %}
                <button type="submit" name="post_id" value="{{ post.id }}" class="btn btn-danger">Dislike</button>
            {% else %}
                <button type="submit" name="post_id" value="{{ post.id }}" class="btn btn-primary">Like</button>
            {% endif %}
        </form>
{% endfor %}

Views.py

def home(request):
    post = get_object_or_404(Post, id=request.POST.get('post_id'))
    if post.likes.filter(id=request.user.id).exists():
        is_liked = True
    context = {
        'posts': Post.objects.all(),
        'is_liked': is_liked,
        'total_likes': post.total_likes(),
    }
    return render(request, 'blog/home.html', context=context)

def like_post(request):   # post like
    post = get_object_or_404(Post, id=request.POST.get('post_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

    return HttpResponseRedirect('http://127.0.0.1:8000/')


    class PostListView(ListView):
        model = Post
        template_name = 'blog/home.html'  # <app>/<model>_<viewtype>.html
        context_object_name = 'posts'
        ordering = ['-date_posted']
        paginate_by = 5

Модель .py

class Post(models.Model):
    title = models.CharField(max_length=100)
    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(self):
        return reverse('post-detail', kwargs={'pk': self.pk})
...