Установка параметра url постоянно - PullRequest
2 голосов
/ 10 января 2012

На моем сайте Django у меня есть определенный параметр, который я хотел бы установить через URL или строку запроса. Например. mysite.com/?param=value. Я хочу, чтобы это значение передавалось всем представлениям после его установки - я могу проверить его с помощью request.GET.get('param', 'default value'). Какой самый простой способ сделать это в Django?

Чтобы было понятнее, вот пример - в шапке моего сайта есть выпадающее меню со списком лет. Как только я нажимаю на один из вариантов, которые я хочу, чтобы этот год был перенесен на все другие части моего сайта, то есть mysite.com/?year=1999, затем mysite.com/somethingelse/?year=1999, mysite.com/onemorething/?year=1999 и так далее. Заранее спасибо.

1 Ответ

4 голосов
/ 10 января 2012

Один из вариантов - хранить его в request.session, а не в request.GET.Он по-прежнему будет установлен и доступен так, как вы хотите:

request.session["param"] = "my value"

request.session.get('param', 'default value')

См. здесь для всех деталей использования сеансов.

Исключение будетбыть, если вы специально хотите, чтобы это было в URL, чтобы он был прозрачным, и пользователь мог изменить его.

ETA: Некоторые ответы на ваши вопросы:

  1. Если вы действительноЕсли вам нужен URL-адрес? year = 1999, чтобы установить переменную сеанса в любом представлении, вы можете создать собственный класс middleware .Промежуточное программное обеспечение служит фильтром, который может изменить запрос HttpRequest до того, как он достигнет представления, или изменить ответ HttpResponse, возвращающийся из представления.В этом случае вы можете сделать так, чтобы он проверил request.GET и при необходимости установил request.session, прежде чем он затем выполнит представление.Посмотрите документы и не забудьте прочитать подробности о промежуточном программном обеспечении.

  2. Наличие его в URL-адресе просто не очень хорошая идея.Есть способы обойти это, но они доставляют много хлопот.

  3. Вы можете использовать RequestContext до передать запрос в шаблон длябыть изменены там.Но с какой стати вы делаете это там, а не в функции просмотра?

...