首页 > 编程问答 >数据列表“占位符”未随表单提交一起发送

数据列表“占位符”未随表单提交一起发送

时间:2024-07-23 10:22:08浏览次数:16  
标签:python forms placeholder

我有一个正在更新 SQL 数据库的 Python 应用程序。一种表单(使用 Jinja)提供了一个数据列表输入,其中包含当前值(来自数据库)作为“占位符”

<input list="item_cat" name="item_cat" placeholder="{{item_cat}}"/>
  <datalist id="item_cat">
     {% for cat_name in categories%}
       <option value="{{cat_name}}">
         {{cat_name}}
       </option>
     {%endfor%}
  </datalist>

用户可以自由地从数据列表下拉列表中选择可用类别之一,或者输入新的类别此字段中的类别。

当我从列表中选择一个选项,或者当我在数据列表中键入新值时,这将按预期工作。我遇到的问题是,如果我不修改数据列表(并保留“占位符”值),我的 python 代码中的 request.form["item_cat"] 就是空值。显然,占位符没有随表单一起提交。

我期望的是,在表单提交时,如果设置了占位符值,它将由 request.form 返回,并且可以在我的 Python 代码中使用。| ||我可能可以通过使用一些时髦的 JS 来检查

字段的值是否为空,然后主动将其设置为创建表单时的占位符值来解决此问题,但这似乎是一种黑客行为。我并不特别反对 JS(它已经在处理我的表单的客户端验证),但我认为有更好的方法。 item_cat field is null and then actively set it to whatever the placeholder value was when the form was created, but that seems like a hack. I don't object to JS particularly (it's handling the client-side validation of my forms already) but I assume there's a better way.


你是对的,占位符值不会与表单提交。它们仅仅是为了增强用户体验,而不会被浏览器识别为要提交的数据。

你遇到的问题的核心是,浏览器不会为未更改的输入字段提交数据。由于你正在使用占位符来表示数据库中的当前值,并且用户没有与该字段交互,所以不会有任何数据被发送到你的 Python 代码。

让我们探索一些无需依赖 JavaScript 就能解决这个问题的方法:

1. 隐藏输入字段

一种常见的方法是包含一个隐藏的输入字段,该字段与你的数据列表输入一起保存当前值。这将确保即使用户没有与数据列表交互,值也会被提交。

html <input type="hidden" name="item_cat" value="{{item_cat}}"> <input list="item_cat" name="item_cat" placeholder="{{item_cat}}"> <datalist id="item_cat"> {% for cat_name in categories%} <option value="{{cat_name}}">{{cat_name}}</option> {%endfor%} </datalist>

在你的 Python 代码中,你可以先检查 request.form['item_cat'] 是否具有一个值。如果没有(意味着用户没有选择新的类别),那么你可以使用隐藏输入字段提交的值。

2. 默认值处理(在 Python 中)

另一种方法是在你的 Python 代码中处理默认值。你可以检查 request.form['item_cat'] 是否为空。如果是,则使用数据库中的初始值。

python item_cat = request.form.get('item_cat') if not item_cat: item_cat = item_cat_from_database # 从数据库获取初始值

这两种方法都可以有效地解决问题,而无需使用 JavaScript。选择哪种方法取决于你的偏好以及你的应用程序的整体结构。

标签:python,forms,placeholder
From: 78781306

相关文章

  • 强制从当前包自动导入的 Python 以此包的名称为前缀
    我在VSCode中使用Python和Pylance扩展。在我正在编辑的自己的包中,自动添加的导入(设置“导入格式:绝对”)如下所示:frommydirectory.myfileimportmyclass但是,我的Python包正在被被一个(非常愚蠢且不可协商的)外部系统消耗,该系统拒绝正确解释它,除非导入的格式特别......
  • Python语言-面向对象
    知识代码classJobSalary(object):job=''def__init__(self,city):self.jobname="数据分析师"self.exp=''self.city=city#方法defdata_normalize(self,data):print(f'正在规范化......
  • 需要帮助使用 Selenium Python 单击 Microsoft Teams 按钮
    我将Python与Selenium结合使用,并自动登录MicrosoftTeams。进入后,弹出窗口显示我需要单击“立即切换”以切换到V2版本。我似乎无法使用SeleniumPython成功单击此按钮。谁能帮我自动点击这个按钮?这是我不成功的尝试:self.driver.find_element(By.CLASS_NAME,......
  • python接口自动化(四十)- logger 日志 - 下(超详解)
    宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介按照上一篇的计划,这一篇给小伙伴们讲解一下:(1)多模块使用logging,(2)通过文件配置logging模块,(3)自己封装一个日志(logging)类。可能有的小伙伴在这里会有个疑问一个logging为什么分两篇的篇幅......
  • Python面试题:使用NumPy进行高效数组运算
    NumPy是Python中进行高效数组运算的基础库。以下是一些示例,展示了如何使用NumPy进行高效的数组运算,包括创建数组、数组操作、数学运算以及一些高级操作。安装NumPy如果你还没有安装NumPy,可以通过以下命令进行安装:pipinstallnumpy示例代码1.创建数组import......
  • Python面试题:使用Matplotlib和Seaborn进行数据可视化
    使用Matplotlib和Seaborn进行数据可视化是数据分析中非常重要的一部分。以下示例展示了如何使用这两个库来创建各种图表,包括基本的线图、柱状图、散点图和高级的分类数据可视化图表。安装Matplotlib和Seaborn如果你还没有安装这两个库,可以使用以下命令进行安装:pipins......
  • 20、Python之容器:红楼主角都有谁?10行代码生成《红楼梦》词云图
    引言Python系列前面的文章中,我们介绍了Python中容器的基本使用,上一篇中,我们又重点介绍了Counter计数器的使用。这些介绍,应该足以应付日常的工作需求了。在今天的文章中,我想以词云图的生成这个综合案例,巩固一下前面关于容器、字典推导式、Counter的使用。同时,介绍两个比较好......
  • 使用snowflake.connector 3.0.3上的密钥对从python连接到snowflake
    我正在尝试使用Snowflake.connector包从我的Python代码连接到Snowflake。不幸的是,由于遗留代码,我只能在python3.7.3上使用Snowflake连接器版本3.0.3,并且无法升级我确实设法从我自己的计算机进行连接,使用:con=Snowflake.connector。连接(...私有密钥文件=......
  • python 文件(txt)操作
    我有一个txt文件,其中包含一列(大约2000个)单词。每个单词只用一个新行分隔。我想将所有这些单词存储在一个数组中words.txt文件的示例:applebananaorange我尝试过的代码:importrandomwithopen('E:/Code/learn/Projects/word-guessing-game/words.txt','r')a......
  • matplotlib与Python不兼容问题
    “我使用的是Matplotlib版本3.7.2。Anaconda的Spyder中的Python版本是3.8.18。当我运行importmatplotlib.pyplotasplt行时,出现错误module'matplotlib'hasnoattribute'rcParams'。当我尝试将Matplotlib和matplotlib.base包从当前的3.7.2版本升级到3.8......