提问人:JoseGonzales 提问时间:10/31/2023 更新时间:11/10/2023 访问量:37
如何在没有最后 4 个字符的情况下将变量作为字符串传递到 HTML 中
How to pass a variable as a string into HTML without the last 4 characters
问:
我正在尝试使用 flask 在我的网站上显示图像。我有一个for循环,可以遍历在我的“static”目录中找到的图像,但我也想在图像底部显示图像的名称。目前,图像的名称显示为“image.jpg”,但我希望删除“.jpg”。知道我该怎么做吗?
这是我 app.py
from flask import Flask, render_template, flash, url_for
import os
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template("home.html")
@app.route('/select.html')
def select():
imagelist = os.listdir(os.path.join(app.static_folder,"images"))
return render_template("select.html", imagelist=imagelist)
@app.route('/versus.html')
def versus():
return render_template("versus.html")
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True)
这是我有for循环的html模板
<!DOCTYPE html>
<html>
<head>
<title>Disney Favorites</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<style>
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
}
.centre {
text-align: center;
}
</style>
</head>
<body>
<h1 style= "font-size: 25px" class="text-center">Click on your favorite animated Disney canon movie</h1>
<section>
{% for image in imagelist %}
<div class="centre">
<button type="submit">
<img class="center" src="{{ url_for('static', filename='images/' + image) }}">
</img>
<p>{{image}}</p>
</button>
</div>
{% endfor %}
</section>
答:
0赞
rioV8
10/31/2023
#1
您必须使用过滤器:
<p>{{image|replace(".jpg", "")}}</p>
评论
0赞
BlackJack
11/10/2023
这是在另一个字符串中替换一个字符串,并且只有在末尾时才巧合地删除它。
0赞
rioV8
11/10/2023
@BlackJack 如果你的图像或文件只是放弃最后 4 个字符会得到错误的输出,如果图像不是存储在服务器上而是生成并且没有扩展名作为 URL,但类型是响应的一部分,总是删除 4 个字符是错误的.tiff
.webp
0赞
BlackJack
11/10/2023
这就是为什么更好的解决方案是用于获取没有扩展名的文件名。还解决了问题中的代码使用硬编码分隔符和 .pathlib.Path
+
0赞
BlackJack
11/10/2023
#2
这是一个懒惰的问题。字符串是一种基本数据类型,使用字符串切片 () 和字符串方法删除固定数量的字符,例如通常是初学者教程的一部分,或者至少通过查看文档很容易发现。filename[:-4]
filename.remove_suffix(".jpg")
这甚至与 Flask 或 Web 编程无关:
>>> import jinja2
>>> jinja2.Template("{{filename[:-4]}}").render(filename="test.jpg")
'test'
评论
0赞
rioV8
11/10/2023
它是 Flask,因为 Jinja2 是 Flask 的默认模板引擎
0赞
rioV8
11/10/2023
如果模板引擎不支持您建议的构造,则说明您有问题
0赞
BlackJack
11/10/2023
@rioV8 但这无关紧要,问题是关于 Python 类型的。这不会改变其 API 或 Web 应用程序或 Jinja 模板中的行为。str
0赞
BlackJack
11/10/2023
更好的解决方案是放弃用于路径的普通字符串,并使用标准库中的属性来获取不带扩展名的文件名。pahtlib.Path
stem
0赞
rioV8
11/10/2023
因此,如果我在 Python 脚本中读取文本文件,则会计算所有表达式? 不是一个有效的 Python 结构,但它做了一些有用的事情{{x|y}}
0赞
Diego E. Maidana
11/10/2023
#3
您可以使用带有负数的方法 slice 从字符串末尾开始计数。
image = "myImage.jpg"
pureImageName = image[:-4]
print(pureImageName) // myImage
评论
0赞
rioV8
11/10/2023
OP 需要 Jinja2 模板中的解决方案,他需要文件名和没有可能扩展名的文件名
上一个:VBA 中变量值的意外覆盖
评论
image.replace(".jpg", "")
.jpg
image