分页的自定义标记

时间:2014-01-24 14:14:29

标签: django pagination django-templates django-template-filters

我一直在尝试构建自己的分页标签 - pagetag。

但是当我渲染时:

        {% if people.has_previous %}
            <li><a href={% pagetag people.previous_page_number %}>&laquo;</a></li>
        {% else  %}
            <li class="disabled"><a href="#">&laquo;</a></li>
        {% endif %}

        {% for page in people.paginator.page_range  %}
            {% if page == people.number %}
                <li class="disabled"><a href="#">{{page}}</a></li>
            {% else %}
                <li><a href={% pagetag page %}>{{page}}</a></li>
            {% endif %}
        {% endfor %}

        {% if people.has_next %}
            <li><a href={% pagetag people.next_page_number %}>&raquo;</a></li>
        {% else %}
            <li class="disabled"><a href="#">&raquo;</a></li>
        {% endif %}

我在第一页上获得了以下链接:

            <li class="disabled"><a href="#">&laquo;</a></li>
                <li class="disabled"><a href="#">1</a></li>
                <li><a href=/?page=page>2</a></li>
                <li><a href=/?page=page>3</a></li>
               <li><a href=/?page=people.next_page_number>&raquo;</a></li>

不是所需的?page = 2等等。

def pagetag(parser, token):
    tokens = token.split_contents()
    print tokens
    if len(tokens) < 1:
        raise TemplateSyntaxError, "pagetag takes at least 1 arguments"
    return PageNode(tokens[1].strip())

如何正确传递参数?

1 个答案:

答案 0 :(得分:1)

使用simple tags。例如:

@register.simple_tag
def pagetag(page):
    return '/?page=' + page

然后,在您看来,请务必使用{{ }}代替{% %}

<li><a href="{{ pagetag page }}">{{page}}</a></li>

注意:建议不要仅使用其他标记来添加简单的字符串。就像在documentation中一样。

相关问题