我正在嘗試動態創建指向靜態檔案夾中檔案的鏈接串列,并且由于邏輯上需要的嵌套 {{ {{ }} }} 失敗。
Flask 服務器中有檔案
/Static/FileFolder
它們被收集在一個串列中
FileList = []
for path in os.listdir(FileFolderPath):
if os.path.isfile(os.path.join(FileFolderPath, path)):
Filelist.append(path)
鏈接是用
return render_template('list.html', FileList = FileList)
并且 Html 有這塊
{% for item in FileList %}
<li><a href=" {{url_for('static', filename=' {{item}} ') }}">{{item}}</a> </li>
{% endfor %}
失敗為
filename=' {{item}} '
沒有給我檔案鏈接的 url,而只是一個無意義的鏈接
http://127.0.0.1:5020/static/%20{{item}}%20
其中有錯誤的檔案夾和名稱。那么我怎樣才能提供正確的檔案夾并在用于 url_for 的 {{ }} 中放置指向 {{item}} 的鏈接?
uj5u.com熱心網友回復:
如果您只使用一次 jinja2 降價,如下所示:
{% for link in links %}
<li><a href="/static/{{ link }}">{{ link }}</a> </li>
{% endfor %}
另一種選擇,但這主要取決于您要完成的作業,是向您的 app.py 添加另一條路線
@app.route('/static/<page>')
def get_link(page):
return f'{page}'
然后在你的 html 檔案中:
<li><a href="{{ url_for('get_link', page=link) }}">{{ link }}</a></li>
此外,您可能需要考慮使用 PEP8 命名指南 > https://peps.python.org/pep-0008/#type-variable-names
uj5u.com熱心網友回復:
您不需要在已經是 jinja 模板的塊內使用雙花括號
templates/lists.html
{% for item in FileList %}
<li><a href=" {{ url_for('file', variable=item) }}">{{item}}</a> </li>
{% endfor %}
app.py
import os
from flask import Flask, render_template
app = Flask(__name__)
def funk():
FileList = []
FileFolderPath = '.'
for path in os.listdir(FileFolderPath):
if os.path.isfile(os.path.join(FileFolderPath, path)):
FileList.append(path)
return FileList
@app.route('/')
def hello_world():
FileList = funk()
return render_template('./list.html', FileList = FileList)
@app.route('/<variable>/')
def file(variable):
return variable
terminal
export FLASK_APP=app.py
flask run
tree
.
├── app.py
└── templates
└── list.html
uj5u.com熱心網友回復:
如前所述,您可以將包含相對路徑的變數直接傳遞給檔案,而無需括號和引號。
請注意,您需要靜態檔案夾內的完整相對路徑才能使用url_for('static', filename=...).
以下示例使用該pathlib模塊來實作您的要求。
from pathlib import Path
@app.route('/')
def index():
# ./static/path/to/folder/
p = Path(app.static_folder, 'path', 'to', 'folder')
filenames = [x.relative_to(app.static_folder) for x in p.iterdir() if x.is_file()]
return render_template('index.html', **locals())
<ul>
{% for filename in filenames -%}
<li><a href="{{ url_for('static', filename=filename) }}">{{ filename }}</a></li>
{% endfor -%}
</ul>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/529880.html
