#django
Вопрос:
итак, вот мой пользовательский тег:
@register.inclusion_tag('app/comments_list.html', takes_context=True)
def show_comments(context):
request = context['request']
comments_list = Comments.objects.all().order_by('-comment_time')
paginator = Paginator(comments_list, 3)
page = request.GET.get('page')
try:
comments = paginator.page(page)
except PageNotAnInteger:
comments = paginator.page(1)
except EmptyPage:
comments = paginator.page(
paginator.num_pages)
return {'comments': comments}
и вот мой шаблон для рендеринга:
{% for comment in comments %}
{% if comment.commented_by.username == user.username %}
<h6><font color="green">You</font></h6>
{% else %}
{{comment.commented_by}}
<h7>{{ comment.comment_time }}</h7>
{% endif %}
<div class="comment">
{{comment}}
</div>
{% endfor %}
Моя модель:
class Comments(models.Model):
commented_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
comment = models.TextField(max_length=300)
comment_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.comment
По какой-то причине он успешно визуализирует все, кроме
if
условия. И я понятия не имею, почему.
Любая помощь будет оценена по достоинству! Спасибо!
Комментарии:
1. Что такое запрос. ЗАЙМИСЬ
comments = paginator.page(page) request.GET
этим делом ?2. @WillemVanOnsem просто опечатка, я думаю, пока я размещал вопрос. Я отредактировал его.
Ответ №1:
Словарь, который вы возвращаете из своей функции, становится контекстом для шаблона, который будет отображаться. Следовательно, в вашем шаблоне нет переменной user
в контексте app/comments_list.html
. Вы можете изменить возвращаемый словарь, чтобы также передать его пользователю:
@register.inclusion_tag('app/comments_list.html', takes_context=True)
def show_comments(context):
...
return {'comments': comments, 'user': context['user']}
Примечание: Как правило, бизнес-логика выполняется в представлениях, и я не предполагаю, что на многих страницах вам нужны комментарии? То, что вы делаете,
добавляя пользовательские теги шаблонов для этого, будет несколько неодобрительно воспринято
Разработчики Django, так как эта логика лучше подходит для просмотра.
Комментарии:
1. Да, я уже понял, что забыл добавить пользователя в контекст= извините за глупый вопрос. Я просто пробую что-то новое, чтобы изучить Джанго, на самом деле в данный момент я не преследую никакой концепции.