编辑:在尝试找到解决方案时,主题发生了一些变化 - TL; DR:请参阅答案。对于所有对该主题的开发感兴趣的人,请继续; - )
标题可能令人困惑,但我不知道如何用更好的词语表达 - 让我说我有一个简单的视图功能:
@app.route('/chart')
def chart():
return render_template('chart.html')
如果我现在直接在浏览器中打开此视图,通过“http://localhost:5000/start”,它可以正常工作 - javascript内容按预期工作(绘制图表,使用滑块调用不同的视图等)。
但是,使用其他模板中的链接不起作用,例如我有一个根视图:
@app.route('/')
def index():
return render_template('index.html')
并在此index.html
内部指向'/ chart'的链接:
<a href="{{ url_for('chart') }}">Chart</a>
现在,按下该链接,它加载我的模板,我可以看到基本的html内容,但javascript代码根本没有加载/启动(也是浏览器收到的源代码是正确的)。在这两种情况下,服务器都会收到相同的命令:
127.0.0.1 - - [13/May/2015 10:48:18] "GET /chart HTTP/1.1" 200 -
但是,只有我直接在浏览器中打开它,它才会按预期工作。
我的链接/重定向有问题吗?
编辑:我找到导致问题的单行:在我的index.html
我正在加载jQuery mobile:
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
删除这一行,一切都按预期工作 - 但当然我不想包含它,为什么以及如何影响链接行为?
答案 0 :(得分:4)
默认情况下,jQuery使用Ajax来处理页面请求。这允许页面之间的平滑过渡(没有页面刷新感觉),但它也意味着只加载所请求页面的主体 - 因此标题中不包含javascript库。
因此,必须使用data-ajax="false"
属性将所有必需的javascript包含在原始网站的标头中,或者必须在没有ajax的情况下完成页面请求。这将进行真正的页面刷新,而不进行ajax转换。
有关详细信息,请参阅this。