【问题标题】:BottlePy - returning TypeError: unhashable type: 'set' with %if clauseBottlePy - 返回 TypeError: unhashable type: 'set' with %if 子句
【发布时间】:2018-06-26 01:18:57
【问题描述】:

我正在尝试使用 Bottle 和 Python 3.6 创建一个非常简单的 HTML 表单。我想要一个有两个选项的表单,但我希望能够直接从 python 将默认选项发送到表单。

我的测试代码如下:

# -*- coding: utf-8 -*-

from bottle import route, template, request, post, run

@route('/')
def test_1():

    return template('test.html',
                    selected="F")

@post('/')
def response():
    pass

run(host='localhost', port=8409)

这调用了一个HTML模板,如下(另存为test.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>

    <form method="post" action="/">

        %if {{selected}} == "T":
            <input type="radio", name="sel", value="T" checked>T<br>
            <input type="radio", name="sel", value="F">F<br>
        %else:
            <input type="radio", name="sel", value="T">T<br>
            <input type="radio", name="sel", value="F" checked>F<br>
        %end

        <input type='submit' value='submit'>

    </form>
</body>
</html>

当我尝试运行它时,我收到以下错误消息:

Traceback (most recent call last):
  File "C:\Users\Rogerio\Python VENV\lib\site-packages\bottle.py", line 862, in _handle
    return route.call(**args)
  File "C:\Users\Rogerio\Python VENV\lib\site-packages\bottle.py", line 1740, in wrapper
    rv = callback(*a, **ka)
  File "G:/My Drive/Data Technology/Python/temp.py", line 9, in test_1
    selected="F")
  File "C:\Users\Rogerio\Python VENV\lib\site-packages\bottle.py", line 3619, in template
    return TEMPLATES[tplid].render(kwargs)
  File "C:\Users\Rogerio\Python VENV\lib\site-packages\bottle.py", line 3409, in render
    self.execute(stdout, env)
  File "C:\Users\Rogerio\Python VENV\lib\site-packages\bottle.py", line 3396, in execute
    eval(self.co, env)
  File "G:\My Drive\Data Technology\Python\test.html", line 11, in <module>
    %if {{selected}} == "T":
TypeError: unhashable type: 'set'

似乎问题出在 %if 命令上,但我不知道我做错了什么。任何帮助将不胜感激!

另外,是否有更“正确”的方式将默认值传递给表单?

谢谢!

【问题讨论】:

  • 尝试取出 {{}}。它似乎将您的变量放入一个集合中,它无法与字符串进行比较。
  • @ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 这很简单!谢谢!

标签: python python-3.x bottle


【解决方案1】:

在瓶子模板中,{{foo}} 语法用于输出。除非您想“打印”变量(如使用 html 将其发送到浏览器),否则不应使用它。

要使用%if,您可以照常引用变量:

%if selected == "T":

【讨论】:

  • 谢谢!这对我来说不是很清楚。在我进行更改后它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 2012-11-07
  • 2021-08-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多