2012-06-20 3 views
0

вот моя проблема:Django как сохранить данные GET?

У меня есть список сообщений, которые я могу фильтровать, используя форму на той же странице. Кроме того, я могу отобразить одно из сообщений под списком, нажав на него.

Моя проблема заключается в том, что если я отфильтрую список и затем выберу сообщение для его отображения, данные GET, фильтрующие список, будут «потеряны». Таким образом, все сообщения снова отображаются в списке.

Как я могу отобразить сообщение и сохранить список как есть, когда я нажал на сообщение?

Мои URLs:

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

I см. два варианта.

1: Использовать Django's 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, но одно место для начала - это функция get(), предоставляемая JQuery. – Elliott

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