如果这个问题有点复杂,请道歉。
我希望Django页面显示横幅消息有时。有时用户将通过window.location.href
到达,然后我希望显示横幅,并显示由用户刚刚执行的操作确定的消息。
详细信息:
window.location.href
设置为项目页面来完成此操作。该项目显示为可用或已签出,但我还想向用户显示另一条消息... 最后一项是我遇到问题的地方:我如何“告诉”项目页面显示哪些消息,以及何时显示消息?人们也不会通过扫描仪到达项目页面。
?t=checked_out
或?t=returned
),但这感觉很麻烦。 t=checked_out
参数POST到项目页面(这也感觉不对),那么Django练习然后重定向到其他地方而不是显示页面是不是很好? 也许我在最后一点上太过分了。
无论如何,基本问题是:如何通过window.location.href
将隐藏变量传递到页面?
感谢您的帮助。我觉得有一些基本的东西我还没有在这里学习:)
答案 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
个会话中完成。
如果必须,您的方法应该是可行的:
request.session['myvar'] = 'ajax_posted_stuff'
)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 %}