Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据django中是否喜欢照片更改按钮_Python_Django_Django Templates - Fatal编程技术网

Python 根据django中是否喜欢照片更改按钮

Python 根据django中是否喜欢照片更改按钮,python,django,django-templates,Python,Django,Django Templates,我在我的网站上添加了一个功能,用户可以在这里喜欢帖子 我已经成功地做到了这一点,但是我在添加一个功能时遇到了困难 这是按钮中的文本,取决于帖子是否受欢迎 现在,无论帖子是否受欢迎,按钮都保持不变 models.py class Post(models.Model): file = models.ImageField(upload_to='images/') summary = models.TextField(max_length=600) pub_date = mode

我在我的网站上添加了一个功能,用户可以在这里喜欢帖子

我已经成功地做到了这一点,但是我在添加一个功能时遇到了困难

这是按钮中的文本,取决于帖子是否受欢迎

现在,无论帖子是否受欢迎,按钮都保持不变

models.py

class Post(models.Model):
    file = models.ImageField(upload_to='images/')
    summary = models.TextField(max_length=600)
    pub_date = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    likes = models.ManyToManyField(User, through='Like', related_name='likes')

    def __str__(self):
        return self.user.username

    def pub_date_pretty(self):
        return self.pub_date.strftime('%b %e %Y')

    def summary_pretty(self):
        return self.summary[:50]

    @property
    def total_likes(self):
        return self.likes.count()

class Like(models.Model):
    status = models.BooleanField()
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
views.py

def likepost(request, post_id):
    if request.method == 'POST':
        post = get_object_or_404(Post, pk=post_id)
        user = request.user
        if post.likes.filter(id=user.id).exists():
            post.likes.remove(user)
            return redirect('home')
        else:
            like = Like()
            like.post = post
            like.user = user
            like.status = True
            like.save()
            post.likes.add(user)
            return redirect('home')
我的模板:

  {% if post.likes.status == True %}
        <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Unlike {{ post.total_likes }} </button></a>
    {% else %}
        <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Like {{ post.total_likes }} </button></a>
    {% endif %}
{% if like.status == True %}
编辑2:

 {% extends 'accounts/base.html' %}
    {% block content %}
    {% load static %}
    {% for post in posts.all %}
      <div class="container pl-5">
        <div class="row pt-3">
            <img src="{% static 'grey.jpg' %}" width="600px" height="60px">
            <div class="pt-3 pl-5" style="position: absolute;"> <b> {{ post.user.username }} </b> </div>
        </div>
        <br>
        <div class="card" style="width: 600px; bottom: 24px; right: 15px;">
            <img src="{{ post.file.url }}" width="599px">
        </div>
        <br>
        <div class="card" style="width: 600px; bottom: 50px; right: 15px;">  <img src="{% static 'grey.jpg' %}" width="600px" height="150px">    </div>
        <div class="col-6" style="bottom:145px; left: 5px;">
            <div style="position: absolute;"> <b> {{ post.user.username }} </b> {{ post.summary_pretty }}</div>
        </div>
        {% for like in post.likes.all %}
          {{like.username}}
        {% endfor %}

        {% if like.status %}
                 <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Unlike {{ post.total_likes }} </button></a>
        {% else %}
                 <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Like {{ post.total_likes }} </button></a>
        {% endif %}
        <form id="likepost{{ post.id }}" method="POST" action="{% url 'likepost' post.id %}">
          {% csrf_token%}
          <input type="hidden">
        </form>
      </div>
      <br>
      <br>
      <br>
    {% endfor %}
    {% endblock %}
{%extends'accounts/base.html%}
{%block content%}
{%load static%}
{posts.all%}
{{post.user.username}


{{post.user.username}{{post.summary_pretty}} {post.likes.all%中的like的百分比} {{like.username} {%endfor%} {%if like.status%} {%else%} {%endif%} {%csrf_令牌%}


{%endfor%} {%endblock%}
在您的模型中,您已将
likes
定义为
多个域
域:

class Post(models.Model):
    likes = models.ManyToManyField(User, through='Like', related_name='likes')
但在模板中,您正试图从许多类似对象中获取一个布尔值:

{% if post.likes.status == True %}
post.likes
将返回多个对象。相反,您需要根据用户获取类似的内容

编辑: 获得类似状态的一种方法是在视图中执行以下操作:

context['like'] = Like.objects.get(post=post, user=request.user)
然后在模板中:

  {% if post.likes.status == True %}
        <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Unlike {{ post.total_likes }} </button></a>
    {% else %}
        <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Like {{ post.total_likes }} </button></a>
    {% endif %}
{% if like.status == True %}

您使用的是哪个版本的django?由于基于函数的视图,您需要在重定向之前调用
post.save()
。我使用的是最新版本的django。此外,我在重定向之前添加了post.save(),但仍然会出现相同的问题。您是否在Javascript
.submit()
函数中进行页面刷新?除非进行页面刷新,否则模板将保持不变,并且like按钮不会更改,因此post.likes将返回多个对象。我如何根据用户得到类似的结果。我该如何在我的网站上实现这一点?@djangoninja看到编辑中的建议,并尝试一下这与主视图有关吗?我应该将此代码放在哪里?当我把它放到我的主视图中时,它会返回一个错误,说“Post is not defined”,检查我添加了我的主视图cod的原始帖子。(这会呈现主页)