Новичок здесь. Извините, если это очень простой вопрос.
Я работаю с шаблоном Django, используя python. Мое условное выражение, похоже, не работает. Здесь я предположил, что базовое сравнение строк между a и be должно дать Very Happy, второй блок. Это не так. Я вывожу для отображения в окне браузера, и результат всегда очень разочаровывает. Я никогда не получаю Very Happy 2-й блок.
Вот упрощенная версия моего кода:
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 (две разные строки), чтобы изолировать проблему для ясности. Я могу предоставить фактический код. Но я подумал, что если это не работает должным образом с простыми строками как есть, то проблема именно в этом.
Спасибо за ваше время.
Актуальный код ниже. Цель состоит в том, чтобы кнопка редактирования была видна только для сообщений пользователя (т.е. пользователь может редактировать только свои собственные сообщения).{% 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, имеет один и тот же тип данных, строки, поэтому не должно быть проблем со сравнением разных типов данных. Я чувствую, что если я смогу понять, что пошло не так в упрощенном примере, я смогу экстраполировать на свою реальную проблему. Еще раз всем спасибо.
logged_user
иclicked_username
соответствуют вашим ожиданиям? Содержат ли какие-либо из них пробелы в начале или в конце? Одинаковы ли верхний и нижний регистры в обеих строках? - person Some programmer dude   schedule 15.07.2020