Flask:request.view_args 总是返回一个空的字典 [重复]
Posted
技术标签:
【中文标题】Flask:request.view_args 总是返回一个空的字典 [重复]【英文标题】:Flask: request.view_args always returns an empty dicitonary [duplicate] 【发布时间】:2018-11-21 12:56:36 【问题描述】:我正在尝试使用 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 %
)对所有参数进行硬编码,则分页工作正常。
【问题讨论】:
你的观点是否定义了这些论点? @Mekicha 不,它没有,我有吗?我的意思是我可以从request.args
获取参数,例如,无需在我的视图中定义它们!
request.args
访问解析后的 URL 参数(URL 中问号后的部分)。 view_args
is 与请求匹配的视图参数的字典,例如,如果您有一个使用 user_id 变量的视图函数,如下所示:def get_user(user_id)
。
哦,我明白了,所以 request.view_args
工作只是在您将一些参数传递给您的视图时。
【参考方案1】:
我通过使用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 %
【讨论】:
以上是关于Flask:request.view_args 总是返回一个空的字典 [重复]的主要内容,如果未能解决你的问题,请参考以下文章