Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-包含标签_Python_Django_Tags - Fatal编程技术网

Python Django-包含标签

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

在我的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_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”选项()。但我不瘦