2012-06-20 42 views
0

這是我的問題:Django如何保持GET數據?

我有一個消息列表,我可以在同一頁上使用窗體進行過濾。此外,我可以通過單擊它顯示列表下的其中一條消息。

我的問題是,如果我篩選列表,然後選擇一條消息來顯示它,過濾列表的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"), 

我的觀點:

class InboxView(SearchViewMixin): 
    template_name = "kernel/networking/messages/inbox.html" 
    form_class = InboxForm 

inbox = InboxView.as_view() 

class InboxMessageView(InboxView): 
    def dispatch(self, request, *args, **kwargs): 
     self.message = get_object_or_404(Message, pk=kwargs['message_pk']) 
     return super(InboxMessageView, self).dispatch(request, *args, **kwargs) 

    def get_context_data(self, **kwargs): 
     context = super(InboxMessageView, self).get_context_data(**kwargs) 
     context['message'] = self.message 
     return context 

inbox_message = InboxMessageView.as_view() 

inbox.html:

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

我試圖儘可能清楚:/

+0

您是否嘗試過使用AJAX(或者不使用AJAX,例如通過僅使用原始JavaScript顯示一些隱藏的內容)? – Tadeck

回答

1

我看到兩個選項。

1:使用Django的session framework

當您收到過濾的請求,存儲在會話中的過濾器選項:request.session['filter_options'] = filter_option_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來說非常簡單,儘管它可以不用。

這將是我的首選解決方案,因爲從用戶的角度來看,交互式更新自己的網站比每次單擊鏈接時必須刷新的網站都要好得多。

+0

我用你的第一個解決方案,它的工作,非常感謝你!我想嘗試你的第二個解決方案,但我從來沒有使用Ajax。你能否給我更詳細的介紹如何做到這一點,如果你知道任何有關ajax的好鏈接(如果可能的話,在django中)。 – user1257144

+0

Ajax幾乎與django無關 - 這是Javascript中的一個概念,它允許JS代碼向服務器發送請求並使用響應更新當前頁面。服務器端幾乎不需要知道ajax甚至存在。如果你從未使用過Ajax,那麼開始的一個好地方就是JQuery。我對JQuery教程並不熟悉,但是開始的一個地方是JQuery提供的get()函數。 – Elliott