Python,Flask,Jinja:列出目录和文件:href设置不正确



我正在尝试列出特定目录("/data/file/transfer"(中的所有文件和子目录。
现在我只在获取第二级子目录中的这个文件时遇到了这个问题。我正在使用金贾模板查看页面。

目录结构如下所示:

/data/
----file/
--------transfer/
-------------first/
----------------second/
-------------------get_this_file.txt


文件get_this_file.txt位于/data/file/transfer/first/second/目录中。

#! /usr/bin/env python
from flask import Flask,render_template, send_file
import os
import sys
app = Flask(__name__)
@app.route("/list_data", defaults={'req_path': ''})
@app.route('/<path:req_path>')
def incident_data(req_path):
base_dir = "/data/file/transfer/"
abs_path = os.path.join(base_dir, req_path)
if os.path.isfile(abs_path):
return send_file(abs_path)
final_files = []
if os.path.isdir(abs_path):
files = os.listdir(abs_path)
for file in files:
temp_file = req_path + "/" + file
print temp_file
final_files.append(temp_file)
return render_template('files.html', files=final_files)
if __name__ == "__main__":
app.config.update(dict(
DEBUG=True,
SECRET_KEY=b'_isecret/'
))
app.run(host="0.0.0.0", port=8080)


我 templates/files.html 如下:

<ul>
{% for file in files %}
<li><a href="{{ file }}">{{ file }}</a></li>
{% endfor %}
</ul>


输出:
在镶边上:
192.168.168.xxx:8080/first/second

第一/第二/get_this_file.txt <---(单击时( 192.168.168.xxx:8080/第一/第一/第二/get_this_file.txt

不明白为什么 href 对于get_this_file.txt是错误的。
任何帮助,不胜感激。为此挣扎了很长时间。

您应该通过在 href 的开头添加/正斜杠来添加相对路径。因此,它可以解析域,就像从域的根目录开始一样。

<a href="/{{ file }}">{{ file }}</a>

然后

OUTPUT: 
on chrome: 
192.168.168.xxx:8080/first/second 
first/second/get_this_file.txt <--- (when clicked) 
192.168.168.xxx:8080/first/second/get_this_file.txt

更新:

尝试使用url_for为您解决所有 href 问题。

<li><a href="{{ url_for('incident_data', req_path=file) }}">{{ file }}</a></li>

最新更新