我正在尝试使用 Flask 附带的paginate()
功能对我的产品目录进行分页。
内部目录我使用搜索过滤器对产品进行排序取决于过滤器本身,在 url 我有超过5到10个参数,这些参数总是在变化,我想要分页路径来包含它们。
在模板内部我这样做:
{% if pagination.has_next or pagination.has_prev %}
{{
macros.pagination_widget(
pagination,
request.endpoint,
args=request.view_args
)
}}
{% endif %}
问题是,request.view_args
总是返回一个空字典,实际上参数位于 url 。
如果我试图通过使用我不想要的{% if %}
和{% else %}
这样的逻辑对所有参数进行硬编码,那么分页就可以了。
答案 0 :(得分:0)
我通过使用request.query_string
并创建宏帮助器解决了这个问题,现在一切正常。
以下是解决方案:
<强> _macros_pagination.html 强>
{% macro pagination_widget(pagination, endpoint, extra='') %}
<ul class="uk-pagination uk-flex-center" uk-margin="">
<li{% if not pagination.has_prev %} class="disabled"{% endif %}>
<a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}&{{extra}}{% else %}#{% endif %}">
<span uk-pagination-previous=""></span>
</a>
</li>
{% for p in pagination.iter_pages() %}
{% if p %}
{% if p == pagination.page %}
<li class="uk-active">
<a href="{{ url_for(endpoint, page = p, **kwargs) }}&{{extra}}">{{ p }}</a>
</li>
{% else %}
<li>
<a href="{{ url_for(endpoint, page = p, **kwargs) }}&{{extra}}">{{ p }}</a>
</li>
{% endif %}
{% else %}
<li class="uk-disabled"><span>...</span></li>
{% endif %}
{% endfor %}
<li{% if not pagination.has_next %} class="disabled"{% endif %}>
<a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.next_num, **kwargs) }}&{{extra}}{% else %}#{% endif %}">
<span uk-pagination-next=""></span>
</a>
</li>
</ul>
{% endmacro %}
<强> template.html 强>
{% import "_macros_pagination.html" as macros %}
{% if pagination.has_next or pagination.has_prev %}
{{
macros.pagination_widget(
pagination,
request.endpoint,
extra=request.query_string
)
}}
{% endif %}