0

セッションに設定されている情報がいくつかあり、このセッション データを使用するビューの URL にこの情報を渡すことができるかどうか疑問に思っていました。ユーザーがそのビューからページをブックマークした場合、セッション データを使用して変数をビューに渡すように、これを機能させたいと考えています。これどうやってするの?

私はフィルタービューを持っているので、現在選択されているフィルターを URL に表示したい... www.mysite.com/filter1/filter2/filter3/ のようなもので、filter2 がクリアされている場合は www.mysite.com/ になりますフィルター1/フィルター3/

現在、フィルター ビューの URLConf は次のようになっています。

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

2 に答える 2

2

あなたが言うように、セッションではなく、URL でデータを伝播します。ただし、質問で示唆しているように、パスではなくクエリ文字列を使用してください。

これを行うための魔法の方法はありません。変数をすべての 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

于 2009-12-10T10:05:47.683 に答える
0

django では $_GET を使用せず、request.GET を使用します。

あなたの URL がhttp://example.com?filter=filter1&filter=filter2&filter=filter5だとしましょう

getlist()次のように使用して、ビューでフィルター名を取得できます。

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

したがって、URL conf ( urls.py) は次のようになります。

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    url(r'^filters/$', 'your_app.views.some_view', name='filter_view'),
)
于 2009-12-10T16:00:17.603 に答える