2016-12-27 3 views
0

У меня есть фильтр даты, что я прохожу через несколько взглядов Джанго:Pass GET параметры через Джанго визуализации() ярлык

views.py

def event_list(request): 
    date_query = request.GET.get("date", str(default_event_date())) 
    d = datetime.strptime(date_query, "%Y-%m-%d").date() 
    # do stuff... 

    return render(request, "events/event_list.html", context) 

Но я хотел бы, чтобы нести вперед GET через render().

Я нашел this answer, как это сделать, используя reverse(), но render() не берет прямой URL.

Я подозреваю, что мне нужно добавить его обратно в request, который передается, но я не уверен, как это сделать.

+0

Что значит «переносить вперед через render()» ??? –

+0

Я имею в виду, после того, как я визуализую, я хочу, чтобы url имел '? Date = 2016-12-30' в конце – 43Tesseracts

+0

Не могли бы вы также вставить фрагмент соответствующей части вашего файла urls.py? – 2ps

ответ

1

Я думаю, вы недооцениваете render. Работа render «S в жизни, чтобы вернуть HttpResponse с content to the user из шаблона HTML и контекстного словаря:

Сочетает данный шаблон с заданным контекстного словаря и возвращает объект HttpResponse с этим оказанной текстом.

В противоположность этому, redirect перенаправляет пользователя на новый URL-адрес (то есть, так GET параметры могут быть включены). Таким образом, если вы используете render, вы должны сохранить свои парцеллы GET вручную. Конечно, вы можете избежать этого путем добавления date к сессии пользователя, делая что-то вроде:

from datetime import date, datetime 

date_query = request.session.get('date') 
if not date_query: 
    date_query = request.GET.get("date", default_event_date()) 
    if not isinstance(date_query, date): 
     date_query = datetime.strptime(date_query, "%Y-%m-%d").date() 
    request.session['date'] = date_query 

d = date_query 

И это позволит вам «переносить» ваши параметры GET для последующих маршрутов и взглядов.

+0

Как сохранить параметры 'GET' вручную? Извиняюсь за плохо сформулированный вопрос, но это то, что я имел в виду. – 43Tesseracts

+0

Параметры GET не должны изменяться для этого конкретного рендера. Они должны только меняться при переходе страницы с отображаемой страницы на следующую страницу. Таким образом, сохранение ваших параметров GET означает форматирование строки запроса (с помощью 'request.GET.urlencode') и добавление ее к каждому URL-адресу, по которому вам нужен параметр date. – 2ps

+0

Спасибо за предложение сессии. В любом случае, это может быть лучшим решением. Я собираюсь попробовать. – 43Tesseracts

Смежные вопросы