Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django如何保持获取数据?_Django - Fatal编程技术网

Django如何保持获取数据?

Django如何保持获取数据?,django,Django,我的问题是: 我有一个邮件列表,我可以使用同一页上的表单进行过滤。此外,我还可以通过单击列表下方的一条消息来显示它 我的问题是,如果我过滤列表,然后选择一条消息来显示它,那么过滤列表的GET数据将“丢失”。因此,所有消息都会再次显示在列表中 我如何显示一条消息并保持列表在单击消息时的状态 我的网址: url(r'^inbox/$', view='inbox', name="kernel-networking-messages-inbox"), url(r'^inbox/(?P<messag

我的问题是:

我有一个邮件列表,我可以使用同一页上的表单进行过滤。此外,我还可以通过单击列表下方的一条消息来显示它

我的问题是,如果我过滤列表,然后选择一条消息来显示它,那么过滤列表的GET数据将“丢失”。因此,所有消息都会再次显示在列表中

我如何显示一条消息并保持列表在单击消息时的状态

我的网址:

url(r'^inbox/$', view='inbox', name="kernel-networking-messages-inbox"),
url(r'^inbox/(?P<message_pk>\d+)/$', view='inbox_message', name="kernel-networking-messages-inbox-read"),
inbox.html:

<form action="" method="get">
...
<input type="submit" value="Search"/>
<table>
...
</table>
{% if message %}
// display message
{% endif %}

...
...
{%if消息%}
//显示消息
{%endif%}
我尽量说得清楚些:/

我看到两种选择

1:使用Django的

收到筛选请求时,将筛选选项存储在会话中:
request.session['filter\u options']=filter\u option\u dict

然后,当您加载页面并且在request.GET中未看到任何筛选选项时,请检查会话中是否有任何选项:

if(len(request.GET) > 0):
    #get filter options from request.GET
    #save filter options to session
elif('filter_options' in request.session):
    #get filter options from session
else:
    #no filter options, display without filtering
请注意,会话是为临时数据设计的,并且特定于一台计算机上的一个浏览器。这对于这个用例来说不是问题,但是需要记住

2:使用ajax加载消息,而不更改页面的其余部分。在服务器上,您可以创建一个视图,返回不带页眉或任何其他格式的消息,并在前端创建javascript以发送请求并将检索到的消息插入页面。使用JQuery很容易做到这一点,尽管它可以在没有JQuery的情况下完成


这将是我首选的解决方案,因为从用户的角度来看,以交互方式更新自己的网站比每次单击链接都要刷新的网站感觉更好。

您是否尝试过使用AJAX(或不使用AJAX,例如,仅使用原始JavaScript显示一些隐藏内容)来拉动它?我使用了你的第一个解决方案,它成功了,非常感谢!我想尝试您的第二种解决方案,但我从未使用过ajax。你能告诉我更多关于如何做的细节吗?如果你知道任何关于ajax的好链接(如果可能的话,可以使用django)。ajax与django几乎没有任何关系-它是Javascript中的一个概念,允许JS代码向服务器发送请求并用响应更新当前页面。服务器端几乎不需要知道ajax的存在。如果您从未使用过ajax,那么最好从JQuery开始。我不熟悉JQuery教程,但有一个地方可以开始学习JQuery提供的get()函数。
if(len(request.GET) > 0):
    #get filter options from request.GET
    #save filter options to session
elif('filter_options' in request.session):
    #get filter options from session
else:
    #no filter options, display without filtering