BottlePy - возвращает ошибку TypeError: unhashable тип: 'set' с предложением% if - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь создать очень простую HTML-форму, используя Bottle и Python 3.6.Мне нужна форма с двумя вариантами, но я хочу иметь возможность отправлять параметр по умолчанию на форму непосредственно из 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'

ItКажется, проблема в команде% if, но я не могу понять, что я делаю неправильно.Любая помощь будет высоко ценится!

Кроме того, есть ли более "правильный" способ передачи значений по умолчанию в формы?

Спасибо!

1 Ответ

0 голосов
/ 25 июня 2018

В шаблонах бутылок синтаксис {{foo}} предназначен для вывода. Вы не должны использовать его, если не хотите «напечатать» переменную (как при отправке в браузер с html).

Чтобы использовать %if, вы можете просто обратиться к переменной как обычно:

%if selected == "T":
...