簡體   English   中英

Django / JavaScript:使用window.location.href將隱藏變量傳遞到頁面嗎?

[英]Django/JavaScript: passing hidden variables to a page with window.location.href?

抱歉,這個問題有點令人費解。

我希望Django頁面有時顯示橫幅消息。 有時用戶會通過window.location.href到達,然后我希望顯示橫幅,並顯示一條消息,該消息由用戶剛剛執行的操作確定。

細節:

  • 我有一個站點范圍內的javascript偵聽器,用於偵聽掃描儀輸入(顯示為鍵盤輸入)。
  • 當它觸發時,我使用jQuery根據項目的狀態返回或檢出該項目。 我通過Ajax POST請求執行此操作。
  • 然后,我立即將用戶帶到我網站上的商品頁面。 我通過在POST請求的響應處理程序內將window.location.href設置為項目的頁面來實現。 該項目顯示為可用或已簽出,但我也想向用戶顯示另一條消息...
  • ...我想顯示一個標語,上面寫着“項目已簽出”或“項目已退回”。

最后一個項目是我遇到問題的地方:如何“告訴”項目頁面要顯示的消息以及何時顯示消息? 人們還將通過掃描儀到達物品頁面。

  • 我可以設置GET參數( ?t=checked_out?t=returned ),但是感覺很混亂。
  • 我可以使用Cookie,但感覺更混亂。
  • 如果我使用t=checked_out參數發布到項目頁面(這也感覺不對),那么將其重定向到其他地方而不是顯示頁面,這不是Django的好習慣嗎?

也許我對最后一點太掛了。

無論如何,基本問題是:如何最好地通過window.location.href將隱藏變量傳遞給頁面?

謝謝你的幫助。 我覺得這里還有一些基本的知識需要學習:)

為什么對第2/3步完全提出AJAX請求? 您異步POST,然后重定向。

您是否可以使用有關javascript所做信息的常規POST,在django后端的會話中添加一些消息(並加載項目視圖)以及服務器重定向到項目頁面?

Django的方式肯定是在django會話中做到的。

如果必須的話,您的方法應該仍然可以:

  1. 在您的ajax帖子中將額外的信息傳遞到django
  2. 將您的“隱藏的變量”設置為django會話( request.session['myvar'] = 'ajax_posted_stuff'
  3. javascript重定向(但認真的說,最好讓服務器重定向)
  4. 從Django會話中提取“隱藏變量”( ajax_posted_stuff = request.session['myvar']

例:

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 %}

您為什么認為使用Cookie會很雜亂? 如果可以的話,我會說去買餅干。 您可以從window.document.cookie讀取cookie。

作為cookie的替代方法,最干凈的解決方案是使用URL哈希:

http://example.com/page#co

您可以使用window.location.hash輕松檢查哈希的存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM