这几天和同学一起写网页,接手了继续美化网页的活时遇到了一些关于写静态文件地址的麻烦。
首先同学从网上扒的模板里更改了静态文件夹,
app = Flask(__name__)
app._static_folder = "./templates/static"
然后为了能够加载出效果,同学把文件夹结构改成了这样,其中,templates文件夹中存放了static文件夹和result_im.html等动态文件(以下皆以result_im.html为例),bu文件夹中存放着我们写的静态html文件(以下皆以2.html为例)。
由于result_im.html模板中的css等文件加载,使用的方式都是url_for来加载静态文件,我们也照猫画虎,稍加改动,便能够在result_im.html文件中成功地放2.html的链接了。改动如下:
<!--模板中能够成功加载css文件的写法-->
<link href="{{url_for('static',filename='css/style.css')}}" rel="stylesheet">
<!--下面为改动后正确的2.html链接方式-->
<a href="{{url_for('static',filename='bu/2.html')}}">
令我困惑的是,之前静态文件夹设置的是./templates/static,但是url_for中的文件夹直接写的是static,成功找到了文件,于是我当时猜测要不是url_for的第一个参数应该直接写静态文件夹名即可,要不就是由于result_im.html在templates文件夹内,所以url_for拼接出来的url是./static/css/style.css(好像最后验证出来都不是正确的?)。
然后我们想在2.html中也加载模板,由于如前文所言,我们url_for中的文件夹直接写的是static,成功找到了文件,所以我想先尝试下,在2.html位于static文件夹里的bu文件夹内的情况下,上述的那种写法是否还能直接使用。于是我把这些css等相关的加载代码复制粘贴到2.html中,结果失败了,效果并没有被渲染出来:
观察后端报错发现,url_for构造出来的文件地址是错误的,url_for没有起到作用。
在网络上搜索解决方法时,由于常规的做法是static和templates同级,而我对html并不熟悉,所以后来放弃搜索,跌跌撞撞试了很多写法,经过一系列尝试后发现,其实直接从static文件夹开始写文件地址,可以顺利地加载出文件。