python - 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”开始的简化示例是相同的数据类型,字符串,因此比较不同的数据类型应该没有任何问题。我觉得如果我能理解简化示例中出了什么问题,我可以推断出我的实际问题。再次感谢大家。
解决方案
谢谢大家的提示。是的,这是一个数据类型问题(我没有意识到在这样的比较中它有那么重要)。我将我的对象变量 slug 以便像这样转换为字符串。
'''{% if post.username|slugify == logged_user %}'''
现在可以了!