Django / JavaScript:使用window.location.href将隐藏变量传递给页面?

时间:2011-02-08 00:54:25

标签: javascript django

如果这个问题有点复杂,请道歉。

我希望Django页面显示横幅消息有时。有时用户将通过window.location.href到达,然后我希望显示横幅,并显示由用户刚刚执行的操作确定的消息。

详细信息:

  • 我有一个站点范围的javascript侦听器,用于侦听扫描程序输入(显示为键盘输入)。
  • 当它触发时,使用jQuery我会返回或签出该项,具体取决于其状态。我是通过Ajax POST请求来完成的。
  • 然后我立即将用户带到我网站上的项目页面。我通过在POST请求的响应处理程序内将window.location.href设置为项目页面来完成此操作。该项目显示为可用或已签出,但我还想向用户显示另一条消息...
  • ...我想展示一个横幅,上面写着'物品已检出'或'退回物品'。

最后一项是我遇到问题的地方:我如何“告诉”项目页面显示哪些消息,以及何时显示消息?人们也不会通过扫描仪到达项目页面。

  • 我可以设置GET参数(?t=checked_out?t=returned),但这感觉很麻烦。
  • 我可以使用cookies但感觉更麻烦。
  • 如果我使用t=checked_out参数POST到项目页面(这也感觉不对),那么Django练习然后重定向到其他地方而不是显示页面是不是很好?

也许我在最后一点上太过分了。

无论如何,基本问题是:如何通过window.location.href将隐藏变量传递到页面?

感谢您的帮助。我觉得有一些基本的东西我还没有在这里学习:)

2 个答案:

答案 0 :(得分:0)

为什么你认为使用cookie会很混乱?如果可以,我会说要去饼干。您可以从window.document.cookie读取Cookie。

作为cookie的替代方案,最干净的解决方案可能是使用URL哈希:

http://example.com/page#co

您可以使用window.location.hash轻松检查是否存在哈希值。

答案 1 :(得分:0)

为什么第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']
  5. 中提取“隐藏变量”

    示例:

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