首页 > 解决方案 > if == 条件未在 django 模板中输出预期结果

问题描述

这里是初学者。抱歉,如果这是一个非常基本的问题。

我正在使用 python 处理 Django 模板。我的 if 条件似乎不起作用。在这里,我假设 a 和 be 之间的基本字符串比较应该产生“非常快乐”,第二个块。它没有。我输出显示在我的浏览器窗口中,结果总是“非常令人沮丧”。我从来没有在第二个街区得到“非常快乐”。

这是我的代码的简化版本:

a = "test4"
b = "test5"

{% if a == b %}
<strong>Very Frustrating</strong>
{% else %}
<strong>Very Happy</strong>
{% endif %}

我的实际代码将有 a 和 b 是变量导入(以确保只有登录的用户才能做某些事情)。像这样:a = {{logged_user}} b = {{clicked_username}}

为了清楚起见,我为 a 和 b(2 个不同的字符串)输入了最简单的测试值来隔离问题。我可以提供实际代码。但我想如果这对于简单的字符串不能按预期工作,这就是问题所在。

感谢您的时间。


实际代码如下。目标是让编辑按钮仅对用户的帖子可见(即用户只能编辑自己的帖子)。
{% if post.username == logged_user %}不显示任何编辑按钮(即使在 post.username 和 logged_username 看起来相同的情况下)。我在上面的简化示例中替换了字符串,以检查它是否与数据类型等有关。

而如果我改变{% if post.username != logged_user %}它(虽然不是我想要的)。看起来下面写的表达式只是评估为假,因此没有显示任何内容。

<div class="post-section">
    {% for post in all_posts %}
            <div class="each_post">
                 <a href="{% url 'profile' post.username %}" class="poster_name">{{ post.username }}</a>
                 <div class="post_post" id="{{post.id}}">{{post.post}}</div>
                {% if user.is_authenticated %}
                {% if post.username == logged_user %}
                <button class="edit_button">Edit</button>
                {% else %}
                {% endif %}
                {% endif %}
                <div id="content_edit"></div>
                 <p class="post_date">{{post.timestamp}}</p>
                 <p class="like_link" id="lk{{post.id}}">{{post.like_count}}</p>
            </div>
    {% endfor %}
</div>

我的视图块

@csrf_exempt
def post(request):
    posts = Post.objects.order_by("-timestamp").all()
    paginator = Paginator(posts, 10)
    page = request.GET.get('page')
    all_posts = paginator.get_page(page)
    if request.method == "POST":

        new_entry = request.POST["user_post"]
        new_post = Post.objects.create(username=User.objects.get(username=request.session["user"]), post=new_entry)
        context = {
            "logged_user": request.session["user"],
            "all_posts": all_posts, 
        }
        return render(request, "network/main.html", context)

    else:

        context = {
            "logged_user": request.session["user"],
            "all_posts": all_posts,
        }

        return render(request, "network/main.html", context)

适用类别模型

class User(AbstractUser):
    num_followers = models.IntegerField(default=0)
    num_following = models.IntegerField(default=0)

    def __str__(self):
        return f"{self.username}"

class Post(models.Model):
    username = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.CharField(max_length=300)
    timestamp = models.DateTimeField(auto_now=True)
    like_count = models.IntegerField(default=0)

    def __str__(self):
        return f"{self.post}"

    def serialize(self):
        return {
            "id": self.id,
            "post": self.post,
            "timestamp": self.timestamp.strftime("%m %d %Y, %I:%M %p")
        }

结论。我从“test4”和“test5”开始的简化示例是相同的数据类型,字符串,因此比较不同的数据类型应该没有任何问题。我觉得如果我能理解简化示例中出了什么问题,我可以推断出我的实际问题。再次感谢大家。

标签: pythondjangoconditional-statementsoperator-keyword

解决方案


谢谢大家的提示。是的,这是一个数据类型问题(我没有意识到在这样的比较中它有那么重要)。我将我的对象变量 slug 以便像这样转换为字符串。

'''{% if post.username|slugify == logged_user %}'''

现在可以了!


推荐阅读