我有一个显示过滤器表单的模板,下面是一个结果记录列表。我将表单绑定到请求,以便过滤器表单将自己设置为返回结果时用户提交的选项。
我也使用分页。使用分页文档中的代码意味着当用户单击下一页时,表单数据将丢失。
以这种方式处理分页和过滤的最佳方法是什么?
ALJ
答案 0 :(得分:2)
如果您不介意稍微调整一下URL,可以将过滤器选项直接嵌入到URL中。这实际上具有使搜索选项可收藏的非常好的附带好处。因此,当用户点击分页上的下一个/上一个按钮时,所有信息都将从URL中转发。
您可能不得不稍微拆分该网页的网址。如果您已经在视图函数中使用了一些关键字参数,则可以将该视图的所有逻辑放在一个函数中。
快速示例
urlpatterns = patterns('',
(r'^some_url/to/form/$', 'myapp.myview'),
(r'^some_url/to/form/(?P<filter>[^/]+)/$', 'myapp.myview'),
)
然后在你的view.py
中def myview(request, filter=None):
if request.method == 'POST':
# if the form is valid then redirect the user to the URL
# with the filter args embedded
elif filter is None:
form = MyForm() # init it with the blank defaults
elif filter is not None:
# Convert your filter args to a dict
data = {'my_form_field' : filter}
form = MyForm(data)
else:
# Sanity checking just in case I missed a case. Raise an exception.
# the rest of the display logic for the initialized form
有些情况下,使用这样的解决方案并不适用,但我不知道更多关于您的具体情况,我不能说。
希望这有帮助!