这里的初学者。如果这是一个非常基本的问题,请道歉。
我正在使用python处理Django模板。我的if条件似乎不起作用。在这里,我假设a和be之间的基本字符串比较应该产生"a";非常高兴,"第二块。事实并非如此。我输出以显示在我的浏览器窗口中,结果总是"0";非常令人沮丧"我从来没有得到";非常快乐"第二块。
这是我的代码的简化版本:
a = "test4"
b = "test5"
{% if a == b %}
<strong>Very Frustrating</strong>
{% else %}
<strong>Very Happy</strong>
{% endif %}
我的实际代码将有a和b作为变量导入(以确保只有登录的用户才能做某些事情(。就像这样:a={{logged_user}}b={点击用户名}}
为了清楚起见,我为a和b(2个不同的字符串(输入了最简单的测试值,以隔离问题。我可以提供实际的代码。但我想,如果这不能像预期的那样对简单的字符串起作用,这就是问题所在
谢谢你抽出时间。
下面的实际代码。目标是使编辑按钮仅对用户的帖子可见(即用户只能编辑自己的帖子({% if post.username == logged_user %}
不显示任何编辑按钮(即使在post.username&logged_username看起来相同的情况下也是如此(。我在上面的简化示例中替换了字符串,以便检查它是否与数据类型等有关。
然而,如果我改为{% if post.username != logged_user %}
,它确实如此(但不是我想要的(。下面所写的表达式似乎只是评估为false,因此没有显示任何内容。
<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";是相同的数据类型,字符串本身在比较不同的数据类型时应该没有任何问题。我觉得如果我能理解简化的例子中出了什么问题,我就可以推断出我的实际问题。再次感谢大家。
初步我们可以从检查两个变量的类型开始
a = {{logged_user}} //(as per naming seems like it would be a User class object)
b = {{clicked_username}} //(as per naming seems like it would be a string)
检查那里的数据类型,如果你发现是这样,那么它必须是a.username与b进行比较
感谢大家的提示。是的,这是一个数据类型问题(我没有意识到在这种比较中它有那么重要(。我盗用了我的对象变量,以便像这样转换为字符串。
"{%if post.username|slugify==logged_user%}">
它现在起作用了!