2009-12-10 79 views
0

我有一些在會話中設置的信息,我想知道是否可以將此信息傳遞到使用此會話數據的視圖的URL。我希望這樣做的方式是,如果用戶從該視圖中爲頁面添加書籤,則會話數據用於將變量傳遞到視圖上。我怎樣才能做到這一點?將會話數據傳遞到URL

我有一個過濾器視圖,所以我想當前選擇的過濾器顯示在URL ... sorta像www.mysite.com/filter1/filter2/filter3/然後,如果filter2被清除,我會有www。 mysite.com/filter1/filter3/

目前我對過濾視圖URL配置看起來是這樣的:

(r'^filter/$', 'filter'), 
(r'^filter/(?P<p>\d{2})/$', 'filter'), 
+0

太模糊:請詳細說明。 – 2009-12-10 09:34:05

+0

我已經添加了更多信息...現在讓我知道問題是否更清楚。 – Stephen 2009-12-10 10:03:27

回答

2

正如你所說,傳播URL上的數據,而不是在會議上。但使用查詢字符串 - 而不是路徑,因爲你似乎在你的問題中提出建議。

沒有神奇的方式來做到這一點 - 你必須手動追加變量到所有的URL。但是,您可以將網址創建封裝在一個函數中,以使其更易於管理。例如:

$GLOBALS['url_state'] = array(); 

function url($base, $params = array()) { 
    global $url_state; 
    $q = http_build_query(array_merge((array) $url_state, $params)); 
    return $q ? "$base?$q" : $base; 
} 

function define_url_state($name, $default = null) { 
    global $url_state; 
    if (isset($_GET[$name])) { 
    $url_state[$name] = $_GET[$name]; 
    } elseif ($default !== null) { 
    $url_state[$name] = "$default"; 
    } 
} 

如果你用它來構建應用程序中的所有URL,你現在可以輕鬆地做出一個變量「粘性」。例如。在你的頁面的頂部,你可以使用這樣的:

define_url_state('page', 1); 

,並進一步下跌的一頁,你可以用url()生成URL。然後,您將獲得默認值(1)或用戶傳遞給頁面$_GET的任何內容。

+0

但要小心。應該只有一個特定資源的URL,但這裏面的危險是/ filter1/filter2/filter3 /可能等同於/ filter2/filter3/filter1 /等。 – 2009-12-10 10:11:48

+0

這種信息應該是部分查詢字符串('$ _GET') - 不是路徑。丹尼爾,我絕對同意這一點。希望我剛剛添加的例子更清晰。 – troelskn 2009-12-10 10:16:54

0

在Django你不使用$ _GET,但request.GET中

可以說,您的網址是http://example.com?filter=filter1&filter=filter2&filter=filter5

你可以在一個視圖中使用getlist()這樣得到的篩選器名稱:

def some_view(request): 
    filters = request.GET.getlist('filter') 

所以你的URL配置(urls.py)將是這個樣子:

from django.conf.urls.defaults import * 

urlpatterns = patterns('', 
    url(r'^filters/$', 'your_app.views.some_view', name='filter_view'), 
) 
+0

我已將上述代碼包含在我的過濾視圖中...我如何獲取要顯示的網址? – Stephen 2009-12-10 16:22:17