Python Django-包含标签
在我的html中,有一个包含所有注释的div。我需要限制要显示的评论数量。因此,我创建了一个包含标记:Python Django-包含标签,python,django,tags,Python,Django,Tags,在我的html中,有一个包含所有注释的div。我需要限制要显示的评论数量。因此,我创建了一个包含标记: <div class="past_comments"> {% limit_amount_in_a_page page_nr=page_nr topic_id=topic.id amount=4 %} </div> @register.inclusion_tag('post/comment_block.html') def limit_amount_in_a_p
<div class="past_comments">
{% limit_amount_in_a_page page_nr=page_nr topic_id=topic.id amount=4 %}
</div>
@register.inclusion_tag('post/comment_block.html')
def limit_amount_in_a_page(page_nr, topic_id=1, amount=5):
topic = get_object_or_404(Topic, id=topic_id)
comments = Comment.objects.filter(topic=topic)
selected_comments = []
starting_index = page_nr*amount
for index in range(starting_index, starting_index + amount):
if index >= len(comments):
break;
selected_comments.append(comments[index])
return {
'topic': topic,
'page_nr': int(page_nr),
'selected_comments': selected_comments,
'amount_comments': comments.all().count(),
'limit_amount_comment': amount,
}
{%limit\u amount\u in\u a\u page\u nr=page\u nr topic\u id=topic.id amount=4%}
@register.inclusion\u标记('post/comment\u block.html'))
第页(第页,主题id=1,金额=5)中的def限制金额:
主题=获取对象或404(主题,id=主题id)
comments=Comment.objects.filter(主题=topic)
选定的_注释=[]
起始索引=页码*金额
对于范围内的索引(起始索引、起始索引+金额):
如果索引>=len(注释):
打破
所选注释。追加(注释[索引])
返回{
"话题":话题,,
“页码”:int(页码),
“选定的注释”:选定的注释,
“金额注释”:注释.all().count(),
“限制金额注释”:金额,
}
因此,这个标签显示了comment_block.html中的代码
{% load static %}
{% load post_tags %}
{% load post_filters %}
{% for comment in selected_comments %}
<div class="comment_body">
<div class="user_info_block">
<div class="content">
<div class="photo_profile"></div>
<div class="user_info"></div>
</div>
</div>
<div class="content_block">
<p>{{comment.content}}</p>
</div>
</div>
{% endfor %}
topic id is {{topic.id}}
page nr is {{page_nr}}<br>
comment amount is {{amount_comments}}<br>
limit amount is {{limit_amount_comment}}<br>
{% if page_nr != 0 %}
<a href="{% url 'post:detail' topic.id page_nr|increase:-1 %}">Previous Page</a>
{% endif %}
{%page_not_over_amount page_nr amount_comments limit_amount_comment%}
{% if comment_not_over_amount %}
<a href="{% url 'post:detail' topic.id page_nr|increase:1 %}">Next Page</a>
{% endif %}
{%load static%}
{%load post_标记%}
{%load post_filters%}
{所选注释中的注释%}
{{comment.content}
{%endfor%}
主题id为{{topic.id}
页码为{{page_nr}}
注释量为{amount\u comments}}
限额金额为{{limit\u amount\u comment}}
{%如果页码=0%}
{%endif%}
{%page\u not\u over\u amount page\u nr amount\u comments limit\u amount\u comment%}
{如果注释未超过金额%}
{%endif%}
如您所见,在显示所有注释后,我创建了另一个标记页\u not \u over \u amount,以隐藏指向下一页的链接(如果已显示所有注释)
@register.inclusion_tag('post/comment_block.html')
def page_not_over_amount(page_nr, comment_amount, comment_limit):
result = page_nr * comment_limit < comment_amount - comment_limit
return {'comment_not_over_amount': result}
@register.inclusion\u标记('post/comment\u block.html'))
def第页未超过金额(第页,注释金额,注释限额):
结果=页码*注释限制<注释数量-注释限制
返回{'comment\u not\u over\u amount':result}
但是,我发现我的标记页\u not \u over \u amount没有准备好comment\u block.html中的任何变量(在我得到异常后,我检查了局部变量。它们的所有值都是“”)。
我想这可能是因为两个标记都重定向到同一个html文件。在第二个标记重定向之后,它刷新页面中的所有变量
我应该调用一个上下文变量吗?好的,看来您要使用一个基本的分页方案。首先,你应该看看Django中的。你绝对应该花一个小时的时间,试着去做 Django是一个重量级的框架,它有一个内置的方式来做大多数事情,其他的都有库。一般来说,如果你发现自己在以一种复杂的方式完成一项普通任务,那么可能有一个解决方案 如果你决定用快速而肮脏的方式来做,那么计算
下一页
和上一页
中的限制金额
如何
@register.inclusion_tag('post/comment_block.html')
def limit_amount_in_a_page(page_nr, topic_id=1, amount=5):
topic = get_object_or_404(Topic, id=topic_id)
comments = Comment.objects.filter(topic=topic)
num_comments = comments.count()
selected_comments = comments[page_nr*amount, (page_nr + 1)*amount]
has_prev = (page_nr != 0)
has_next = ((page_nr + 1) * amount) < num_comments
return {
'topic': topic,
'page_nr': int(page_nr),
'selected_comments': selected_comments,
'has_next' : has_next,
'has_prev' : has_prev,
'amount_comments' : num_comments,
}
@register.inclusion\u标记('post/comment\u block.html'))
第页(第页,主题id=1,金额=5)中的def限制金额:
主题=获取对象或404(主题,id=主题id)
comments=Comment.objects.filter(主题=topic)
num_comments=comments.count()
所选注释=注释[页码*金额,(页码+1)*金额]
has_prev=(页码=0)
has_next=((页码+1)*金额)
另外,请注意使用切片来选择注释
但是,我再次强烈建议您查看Django中的Paginator类。如果您还没有阅读文档,那么阅读文档并完成教程也是一件很好的事情。浏览所有文档可以让您了解什么是内置的,这从长远来看可以节省大量时间。好的,看来您要的是基本的分页方案。首先,你应该看看Django中的。你绝对应该花一个小时的时间,试着去做 Django是一个重量级的框架,它有一个内置的方式来做大多数事情,其他的都有库。一般来说,如果你发现自己在以一种复杂的方式完成一项普通任务,那么可能有一个解决方案 如果你决定用快速而肮脏的方式来做,那么计算
下一页
和上一页
中的限制金额
如何
@register.inclusion_tag('post/comment_block.html')
def limit_amount_in_a_page(page_nr, topic_id=1, amount=5):
topic = get_object_or_404(Topic, id=topic_id)
comments = Comment.objects.filter(topic=topic)
num_comments = comments.count()
selected_comments = comments[page_nr*amount, (page_nr + 1)*amount]
has_prev = (page_nr != 0)
has_next = ((page_nr + 1) * amount) < num_comments
return {
'topic': topic,
'page_nr': int(page_nr),
'selected_comments': selected_comments,
'has_next' : has_next,
'has_prev' : has_prev,
'amount_comments' : num_comments,
}
@register.inclusion\u标记('post/comment\u block.html'))
第页(第页,主题id=1,金额=5)中的def限制金额:
主题=获取对象或404(主题,id=主题id)
comments=Comment.objects.filter(主题=topic)
num_comments=comments.count()
所选注释=注释[页码*金额,(页码+1)*金额]
has_prev=(页码=0)
has_next=((页码+1)*金额)
另外,请注意使用切片来选择注释
但是,我再次强烈建议您查看Django中的Paginator类。如果您还没有阅读文档,那么阅读文档并完成教程也是一件很好的事情。浏览所有文档可以让您了解什么是内置的,这从长远来看可以节省大量时间。这有点难解析,但是从comment\u block.html调用page\u not\u over\u amount不是很糟糕吗,因为该页面重新呈现comment\u block?这不会产生一个无限循环吗?@SamBobel是的,我也有同样的想法。那么,我是否应该构建另一个名为page_not_over_amount的html文件?要解决您所述的问题,请查看“takes_context=True”选项()。但我不瘦