Flask:request.view_args总是返回一个空的dicitonary

时间:2018-06-12 07:47:06

标签: flask jinja2

我正在尝试使用 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 %}这样的逻辑对所有参数进行硬编码,那么分页就可以了。

1 个答案:

答案 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 %}