首页 > 编程问答 >Flask 应用程序中 HTML 脚本标签中的代码会引发一些烦人的小错误

Flask 应用程序中 HTML 脚本标签中的代码会引发一些烦人的小错误

时间:2024-08-08 15:00:20浏览次数:8  
标签:javascript python html flask

Home.html 文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Home</title>
<link rel="stylesheet" type="text/css" href="{{url_for("static",filename="css/css.css")}}">
</head>
<body>
<h1>Welcome to recipe book</h1>
<p>{{length}}</p>
<script>
const amount = "{{length}}";
let list = {{images | tojson}};
const base_URL = "{{ url_for('static',filename='images') }}"; 
const altText = {0:"Breakfast",1:"Lunch",2:"Dinner",3:"Snacks"};
for(let count=0;count<amount;count++){
    let current_image = document.createElement('img');
    let Cur_URL = base_URL + "/" + list[count];
    console.log(Cur_URL);
    current_image.setAttribute("src",Cur_URL);
    current_image.setAttribute('alt',altText[count]);
    current_image.setAttribute('height','200');
    current_image.setAttribute('width','auto');
    document.body.appendChild(current_image);
}   
</script>
</body>

</html>

main.py Flask python 文件:

#,redirect,url_for,send_from_directory,
from flask import Flask,render_template
import os
app = Flask(__name__)
@app.route("/")
def home():
    parent  = r"C:\Users\khait\Desktop\Website\Recipe_Book\static\images"
    everything = os.listdir(parent)
    images = []
    for i in everything:
        if os.path.isfile(os.path.join(parent,i)):
            images.append(os.path.join(i))
    length = len(images)
    return render_template("Home.html",images=images,length=length)

if __name__ == "__main__":
    app.run(debug=True)`

我只是想在我的 html 中使用长度变量。它会抛出与此行相关的错误:“const amount = {{length}};”和这一行“console.log(amount);”:

错误1: 预期属性分配.javascript

错误 2: 声明或声明预期。javascript

我知道对此有很多类似的问题,我也问了一个关于长度变量的类似问题。但这是一个数字烧瓶变量,这是一个列表烧瓶变量。我浏览了它们,但找不到我的问题的答案。我也有兴趣知道布尔、字符和字符串变量的正确语法是什么。我假设字典变量与列表变量具有相同的逻辑。正确的? 任何帮助将不胜感激。


在你的 JavaScript 代码中使用 Flask 变量时,你需要小心处理它们在渲染 HTML 时如何转换为文本。让我们分解一下你的错误以及如何解决它们:

错误 1:预期属性赋值

这个错误是因为你的 Flask 变量 {{length}} 被渲染为 JavaScript 代码的一部分,从而导致语法无效。当你期望一个属性分配时,它看起来像是一个属性。

错误 2:声明或声明预期

这个错误的发生是因为,类似于第一个错误, {{length}} 被渲染为 JavaScript 代码的一部分,并且没有被解释为一个变量。

解决方案

为了解决这些问题,你需要确保你的 JavaScript 代码能够正确地解释 Flask 变量。你可以通过以下方式做到这一点:

  1. 使用 tojson 过滤器并将结果包装在单引号中:

```html
<script> const amount = {{ length | tojson }}; let list = {{ images | tojson }}; const base_URL = "{{ url_for('static', filename='images') }}"; const altText = { 0: "Breakfast", 1: "Lunch", 2: "Dinner", 3: "Snacks" }; for (let count = 0; count < amount; count++) { let current_image = document.createElement('img'); let Cur_URL = base_URL + "/" + list[count]; console.log(Cur_URL); current_image.setAttribute("src", Cur_URL); current_image.setAttribute('alt', altText[count]); current_image.setAttribute('height', '200'); current_image.setAttribute('width', 'auto'); document.body.appendChild(current_image); } </script>

```

这将确保 length 被渲染为一个有效的 JavaScript 数字,并且 images 被渲染为一个 JavaScript 数组。

解释

  • tojson 过滤器将 Python 数据结构转换为 JSON 格式,该格式可以直接在 JavaScript 中使用。
  • {{ length | tojson }} 包装在单引号中可确保它被解释为一个 JavaScript 字符串,从而避免语法错误。

其他数据类型

  • 布尔值: {{ true | tojson }} 将渲染为 true
  • 字符串: {{ "hello" | tojson }} 将渲染为 "hello"
  • 字典: 你可以使用与列表相同的 tojson 过滤器。

通过使用 tojson 过滤器并将结果适当地包装,你可以安全地在 JavaScript 代码中使用来自 Flask 的不同数据类型。

标签:javascript,python,html,flask
From: 78845524

相关文章

  • html+css 实现hover边框2边生长按钮
    前言:哈喽,大家好,今天给大家分享html+css绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • Python爬虫实战:实时微信推送奥运奖牌榜信息
    最近奥运会正在巴黎如火如荼地进行。为了能第一时间获得我国运动健儿的获奖情况,我给大家分享一个python爬虫项目——实时微信推送奥运奖牌榜信息。爬虫每隔5分钟抓取一次奥林匹克官网奖牌榜数据,对比上次抓取的数据,如果奖牌数量或者排名有变化,就将新的获奖信息推送到......
  • 基于Python实现可视化分析中国500强排行榜数据的设计与实现
    基于Python实现可视化分析中国500强排行榜数据的设计与实现“DesignandImplementationofVisualAnalysisforChina’sTop500CompaniesRankingDatausingPython”完整下载链接:基于Python实现可视化分析中国500强排行榜数据的设计与实现文章目录基于Python......
  • python使用selenium和PyPDF2保存多个html页面为pdf
    检索资料时看到比较完备的资料,想着要把所有页面保存下来。正好使用下requests和BeautifulSoup库获取和解析所有的静态页,把静态页保存为单个pdf文件,然后再把所有的pdf文件合并起来生成1个PDF文档。本来想使用python子进程调用wkhtmltopdf工具把静态页生成为单个pdf,然而如此一来pdf......
  • ArcGIS API for JavaScript 3.x 到 4.x 的升级手册
    众所周知,3.x版本主要是构建二维地图,且基本不会再添加新功能;而4.x版本主要是构建于三维地图,与3.x相比并不是简单的升级,基本上就是重写了。所以当我们需要把API从3.x升级到4.x时,应用程序基本上是需要重写的,这里将对API升级过程中涉及到的相关变动进行记录与描述。以下......
  • Python编码规范常用技巧
    Python编码规范常用技巧开场白:Python编码规范的艺术从一团乱麻到井然有序:我的Python代码进化史PEP8:Python编码规范的圣经为什么遵循编码规范如此重要命名约定:给你的代码起个好名字变量名:不只是标识符那么简单函数命名:让意图一目了然类与方法:面向对象的命名艺术代码结......
  • Python实现游戏中的音效制作与环境声音设计
    Python实现游戏中的音效制作与环境声音设计开场白:让声音活起来——游戏音频的魅力为什么游戏中的声音如此重要?个人体验分享:那些让人难忘的游戏音效Python在音频处理中的应用概览基础篇:Python环境搭建与音频库介绍快速入门:安装Python及必备音频处理库库推荐:pydub、soundf......
  • python拆分PDF文件
    先占个空,后面在慢慢更新下面这个代码实现讲一个PDF文件拆分成多个文件importPyPDF2defsplit_pdf(input_pdf_path,output_prefix,start_page,end_page):"""分割PDF文件为多个小的PDF文件,每个文件包含原始文档的一部分页面。:paraminput_pdf_path:输入......
  • Python动态执行代码
    在Python中,动态执行代码是一个强大的特性,它允许程序在运行时编译和执行字符串或存储在文件、数据库等中的代码。这种能力使得Python在需要高度灵活性和动态性的应用中特别有用,比如科学计算、数据分析、Web开发以及自动化脚本等。下面,我将详细介绍Python中动态执行代码的几种......
  • 在Python中,模块(Module)和包(Package)
    在Python中,模块(Module)和包(Package)是组织代码、提高代码复用性、促进代码维护的两种重要机制。它们各自扮演着不同的角色,但又紧密相连,共同构成了Python程序架构的基础。以下将详细阐述Python中模块和包的概念及其区别。一、模块(Module)的概念在Python中,模块是一个包含了Pyth......