【问题标题】:Custom tag doesn't render template completely自定义标签未完全呈现模板
【发布时间】:2021-05-20 12:22:06
【问题描述】:

这是我的自定义标签:

@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 条件。我不知道为什么。 任何帮助将不胜感激!谢谢!

【问题讨论】:

  • comments = paginator.page(page) request.GET 中的 request.GET` 是做什么的?
  • @WillemVanOnsem 只是一个错字,我猜是在我发布问题时。我已经编辑过了。

标签: django


【解决方案1】:

您从函数返回的字典成为将要呈现的模板的上下文。因此,模板app/comments_list.html 的上下文中没有变量user。您可以更改您返回的字典也传递给用户:

@register.inclusion_tag('app/comments_list.html', takes_context=True)
def show_comments(context):
    ...
    return {'comments': comments, 'user': context['user']}

注意:一般业务逻辑是在views中执行的,我不认为很多页面需要你去获取cmets?你做什么 为此添加自定义模板标签会被 Django 开发人员,因为这种逻辑更适合视图。

【讨论】:

  • 是的,我已经意识到我忘了在上下文中添加用户=\ 抱歉这个愚蠢的问题。我只是在尝试新的东西来学习 Django,我现在真的没有追求任何概念。
猜你喜欢
  • 1970-01-01
  • 2015-03-14
  • 2011-03-08
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 2019-12-30
  • 1970-01-01
相关资源
最近更新 更多