【发布时间】:2016-08-26 21:11:45
【问题描述】:
我有 jQuery 选项卡式面板,可在单击时加载选项卡内的页面。这工作正常。我现在想要的是将其他参数传递给 url,例如被单击的选项卡的标题。 要加载的脚本如下:
$(document).ready(function(){
$( "#content" ).load( "{{url_for(xyz, query=query)}}" );
var tabs = $('.tabs > li');
tabs.on("click", function(){
tabs.removeClass('active');
$(this).addClass('active');
$( "#content" ).load( "{{url_for(xyz, query=query)}}" );
})
});
html 如下:
<ul class="tabs clearfix" >
<li>
<a href=# >All</a>
</li>
<li class=active >
<a href=# >You</a>
</li>
<li>
<a href=# >Me</a>
</li>
我想将标签标题作为另一个参数传递给我的烧瓶 url_for。此外,检查对象属性的最佳方法是什么。我的意思是,在 python 中,我可以使用 dir(object) 列出有关该对象的所有内容。是否有一种简单的方法可以在浏览器中的某处显示单击的选项卡对象的属性。谢谢
更新 这是我想出的:
var index = $(this).children('a')[0].title;
如果你想要a标签的标题或者
var index = $(this).children('a')[0].innerHTML;
现在的问题是我无法将这个 js 变量传递给 url_for 函数。或者更确切地说,在我看来,它在函数内部显示为 None
更新二 我现在有一个条件,因为根据我的理解,我不能将 js 变量传递给 jinja。
if(index=='a'){
$( "#content" ).load( "{{url_for('xyz', index='a', query=query)}}" );
}
else if(index=='b'){
$( "#content" ).load( "{{url_for('xyz', index='b', query=query)}}" );
}
else{
$( "#content" ).load( "{{url_for('xyz', query=query)}}" );
}
现在的问题是,flask 只传递第一个参数,而第二个是 None。因此,在 if 块中,索引的值在查询为 None 时通过,而在 else 块中,查询具有值。视图里面的函数是
@app.route('/xyz')
def xyz():
query = request.args.get("query")
index = request.args.get('index')
更新 3 我已经弄清楚了问题所在。我正在使用 jQuery 加载函数中的字符串从页面加载内容。 url_for 创建表单的url
/respanes?index=a&query=b
这是我需要的,但是当它包含在引号中时,&符号被转换为浏览器无法正确读取的&amp;
/respanes?index=a&query=b
所以现在我需要能够正确地逃脱它。我试图将字符串包装在 encodeURI 中,但没有帮助。
所以我最终不得不使用替换来准确地拥有我想要的字符串。
$( "#content" ).load('{{url_for('.xyz, index=a, query=query)}}'.replace('&','&'));
希望有人能想出一个更好的方法来做到这一点。我想要的只是有一个选项卡式面板,它将通过 ajax 在其中加载一个页面。我不确定是否需要经历所有这些喧嚣,但希望像我这样的菜鸟可以从我的挣扎中汲取灵感:)
【问题讨论】:
-
Jinja 是否在试图改变实际页面?
-
我的问题是你为什么要这样加载页面?为什么不通过可以在请求正文中发送数据的请求来控制它?
-
我对烧瓶,神社世界有点陌生,所以这就是我让事情发挥作用的方式。我对更好的方法持开放态度,但我相信在这种情况下,我所需要的只是一个 jquery 功能,它可以让我获得被点击的选项卡的标题。非?
-
嗯.. 我没有立即看到您所做的任何问题。您能否在模板中打印
url_for调用的输出并在视图文件中打印request.args的内容? -
请看我上次的更新。任何帮助将不胜感激。我花了太多时间在这上面:(
标签: jquery python flask url-routing jquery-tabs