Django / JavaScript: передача скрытых переменных на страницу с помощью window.location.href? - PullRequest
0 голосов
/ 08 февраля 2011

Извинения, если этот вопрос немного запутан.

Я хочу, чтобы на странице Django отображалось баннерное сообщение иногда .Иногда пользователь приходит через window.location.href, и тогда я хотел бы, чтобы баннер отображался с сообщением, определяемым действием, которое пользователь только что выполнил.

Подробности:

  • У меня есть прослушиватель javascript для всего сайта, который прослушивает ввод со сканера (который представлен как ввод с клавиатуры).
  • Когда он запускается, используя jQueryЯ возвращаю или проверяю товар, в зависимости от его состояния.Я делаю это с помощью Ajax POST-запроса.
  • Затем я немедленно перехожу на страницу товара на моем сайте.Я делаю это, устанавливая window.location.href на странице элемента внутри обработчика ответа запроса POST.Элемент отображается как доступный или извлеченный, но я хочу показать пользователю еще одно сообщение ...
  • ... Я хочу показать баннер с надписью «Товар получен» или «Товар возвращен».

Последний пункт, где у меня возникают проблемы: как мне «сказать» странице элемента, какое сообщение показывать, и когда вообще показывать сообщение?Люди также будут приходить на страницы предметов не через сканер.

  • Я мог бы установить параметры GET (?t=checked_out или ?t=returned), но это выглядит грязно.
  • Я мог бы использовать куки, но это кажется еще более грязным.
  • Если я отправлю сообщение на страницу элемента (что также кажется неправильным) с параметром t=checked_out, разве не будет хорошей практикой в ​​Django перенаправлять куда-то еще, а не отображать страницу?

Возможно, я слишком зациклен на последнем пункте.

В любом случае, основной вопрос: как лучше всего передать скрытые переменные на страницу через window.location.href?

Спасибо за вашу помощь.У меня такое ощущение, что есть кое-что фундаментальное, чему я еще должен научиться здесь:)

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Почему вообще AJAX-запрос для шага 2/3? Вы асинхронно POST, а затем перенаправить.

Можете ли вы сделать обычный POST с информацией о том, что сделал javascript, добавить какое-либо сообщение в сеанс в бэкэнд django (и загрузить его с помощью представления элементов) и выполнить перенаправление сервера на страницу элемента?

Путь django определенно состоял бы в django сессиях.

Если необходимо, ваш метод должен быть возможен в любом случае:

  1. передать дополнительные биты информации в Django в вашем посте ajax
  2. установить ваши "скрытые переменные" для сеанса django (request.session['myvar'] = 'ajax_posted_stuff')
  3. перенаправление javascript (но, если серьезно, было бы лучше, чтобы сервер перенаправил)
  4. извлечение "скрытых переменных" из сеанса django (ajax_posted_stuff = request.session['myvar'])
* * Пример тысяча двадцать-один: * * 1 022
def ajax_view(request):
    if successful_response():
        request.session['show_banner'] = True
        return JSON # or whatever you were doing before

def item_view(request):
    context = {}
    if request.session.get('show_banner'):
        context['show_banner'] = request.session.pop('show_banner') 

    return render_to_response("mytemplate.html", context)

# item.html
{% if show_banner %}
    <h1>Banner shown!</h1>
{% endif %}
0 голосов
/ 08 февраля 2011

Почему вы думаете, что использование куки будет грязным?Я бы сказал, пойти на печенье, если вы можете.Вы можете читать файлы cookie с window.document.cookie.

. В качестве альтернативы файлам cookie наиболее чистым решением может быть использование хеша URL:

http://example.com/page#co

. Вы можете легко проверить наличиехеш с window.location.hash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...