首页 > 编程问答 >Chameleon 模板不替换 python 变量

Chameleon 模板不替换 python 变量

时间:2024-09-25 03:52:41浏览次数:10  
标签:python chameleon

我是使用 FastAPI 和 Python 的 Chameleon 新用户。 我在模板中有以下代码片段:

${ag.name}

在 python 代码中,我有一个类定义为:

class AgeGroupInfo: def init (self,名称:str,检查:str): self.name = 姓名 self.checked = check

视图字典包含 AgeGroupInfo 对象的列表(不是精确的 python 语法,但您可以看到“name”和“checked”的值) : [('Preschool', ' '), ('Child', ' '), ('Teen', ' '), ('Adult', 'checked')]

模板被处理成一个网页此来源:

            <fieldset>
                <legend>Age Group:</legend>
                    <input name="age_group" type="radio" id="${ag.name}" value="${ag.name}"   >
                    <label for="Preschool">Preschool</label>
                    <input name="age_group" type="radio" id="${ag.name}" value="${ag.name}"   >
                    <label for="Child">Child</label>
                    <input name="age_group" type="radio" id="${ag.name}" value="${ag.name}"   >
                    <label for="Teen">Teen</label>
                    <input name="age_group" type="radio" id="${ag.name}" value="${ag.name}" checked >
                    <label for="Adult">Adult</label>
                
            </fieldset>

在某些情况下,${ag.name} 会被正确替换(在“标签”HTML 语句中),但在其他情况下则不会。 ${ag.checked} 的一次使用确实得到了正确的替换。

关于为什么替换在某些情况下有效但在其他情况下无效的任何提示?


问题在于没有明确地告诉 Chameleon 想要对列表进行迭代。正在传递一个包含元组的列表,但 Chameleon 并不知道希望将每个元组视为一个单独的 ag 对象。

为了解决这个问题,需要使用 Chameleon 的循环结构。以下是如何修改的代码以使其正常工作:

1. 在的 Python 代码中:

from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from chameleon import engine

app = FastAPI()

@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
    template = engine.load_template("template.html")
    age_groups = [
        AgeGroupInfo('Preschool', ''),
        AgeGroupInfo('Child', ''),
        AgeGroupInfo('Teen', ''),
        AgeGroupInfo('Adult', 'checked'),
    ]
    return template.render(age_groups=age_groups)

2. 在的 Chameleon 模板 (template.html) 中:

<fieldset>
    <legend>Age Group:</legend>
    {% for ag in age_groups %}
        <input name="age_group" type="radio" id="${ag.name}" value="${ag.name}" ${ag.checked}>
        <label for="${ag.name}">${ag.name}</label>
    {% endfor %}
</fieldset>

解释:

  • {% for ag in age_groups %} {% endfor %} : 这些标签告诉 Chameleon 遍历 age_groups 列表中的每个项目。
  • ag : 在循环的每次迭代中, ag 变量将代表列表中的一个 AgeGroupInfo 对象。
  • ${ag.name} ${ag.checked} : 现在,这些表达式将在循环的每次迭代中正确地替换为 ag 对象的相应属性值。

通过这些更改,的 Chameleon 模板将能够正确地迭代 age_groups 列表,并为每个年龄组生成带有正确值 ( name checked ) 的 radio button。

标签:python,chameleon
From: 79020152

相关文章

  • 如何在 Python 中获得类似 Cron 的调度程序?
    我正在寻找一个Python库,它将提供at和cron类似的功能。我很想有一个纯Python解决方案,而不是依赖于安装在盒子上的工具;这样我就可以在没有cron的机器上运行。对于那些不熟悉cron的人:您可以根据如下表达式来安排任务:02**7/usr/bin/run......
  • 我找不到一种方法让我的 python print 语句在几秒钟后自行删除
    我正在尝试制作一款基于文本的冒险游戏,我希望能够让文本自行删除。举个例子,游戏将使用print()语句打印文本,5秒后文本将被删除或对玩家隐藏。我试图找到其他人与此问题相关的问题,并且我找不到任何信息。我不知道该使用什么命令或与之相关的任何内容,请帮忙。Ivetriedtof......
  • 在 python 中可视化四元数
    我在无人机上安装了一个IMU,每0.1秒收集一次四元数数据(w,x,y,z)。现在我想将四元数数据与实际的无人机方向(视频数据)进行比较。所以我想创建某种盒子对象来显示基于四元数数据的方向。我实现了以下教程,将四元数转换为欧拉以进行可视化:https://www.youtube.com/watch?......
  • 有没有办法在 python 中获取特定的键盘输入
    我正在为学校开发一个项目,它目前有行输入(“按Enter继续”),它可以工作,但只要用户按Enter键程序继续,输入是什么并不重要,而且我我希望它仅在按下特定键时才起作用。我查了一下,曾经有一个键盘模块,但由于某种莫名其妙的原因它被删除了,那么还有其他方式获取输入吗?你绝对可以......
  • python+flask计算机毕业设计基于微信小程序的法律问题咨询系统设计与实现(程序+开题+论
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和智能手机的普及,人们获取信息和解决问题的途径日益多样化。在法律服务领域,传统的线下咨询方式已难以满足公众日益增......
  • python+flask计算机毕业设计基于人脸识别的医疗保险系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着科技的飞速发展和人口老龄化的加剧,医疗保险系统面临着前所未有的挑战与机遇。传统医疗保险管理方式依赖于人工审核与纸质记录,不仅效率......
  • python+flask计算机毕业设计基于微信小程序的河南省美食分享平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在移动互联网时代,智能手机和社交媒体已成为人们日常生活不可或缺的一部分。微信小程序作为腾讯推出的一种轻量级应用形态,凭借其无需安装、......
  • python+flask计算机毕业设计基于微信小程序的网络文学管理平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网的迅猛发展,网络文学已成为当代文化生活中不可或缺的一部分,它不仅丰富了人们的阅读体验,还促进了文学创作的多元化与普及化。然而......
  • Python不同方式正倒序遍历的时间开销
    fromtimeitimporttimeitli=[iforiinrange(1000000)]deffor_loop(n):#使用for直接遍历ret=0foriinli:ret=li[i]deffor_loop_enumerate(n):#使用enumerate进行遍历ret=0foridx,iinenumerate(li):re......
  • 【入门岛·第2关】python基础
    目录Python实现wordcountVscode连接InternStudiodebug笔记Python实现wordcountimportstringdefwordcount(text):#去掉标点符号,并将文本转换为小写text=text.translate(str.maketrans('','',string.punctuation)).lower()#按空格分割文本为单词......