Как request.form из цикла jinja2 в HTML-шаблон - PullRequest
0 голосов
/ 24 апреля 2019

так что у меня на моем веб-сайте есть список всех новых "предложений", сделанных недавно. Они перечислены в цикле jinja2 в моем HTML-шаблоне. Дело в том, что у меня есть кнопки рейтинга под каждым предложением, и я хочу иметь возможность получить рейтинг, на который пользователь нажал в python, а затем отправить его в базу данных. Но я не знаю, как это сделать, потому что я еще новичок ..

Итак, вот что у меня есть в моем html-шаблоне:

            {% for proposition in propositions %}
            <div class="feed_propBox"> <!--prop Box: Begin-->
                <form method="POST" action="rate">

                    <p  id="titre" name="titre" value="{{proposition.title}}">{{ proposition.title }}</p>
                    <p  id="perso" name="perso">{{ proposition.date }}</p>
                    <p  id="content" name="content">{{ proposition.content }}</p>

                    <div class="ratingBlock">
                        <button type="submit" class="mThree ratingButton" id="m3" name="rate" value="m3">-3</button>
                        <button type="submit" class="mTwo ratingButton" id="m2" name="rate" value="m2">-2</button>
                        <button type="submit" class="mOne ratingButton" id="m1" name="rate" value="m1">-1</button>
                        <button type="submit" class="zero ratingButton" id="z" name="rate" value="z">0</button>
                        <button type="submit" class="pOne ratingButton" id="p1" name="rate" value="p1">1</button>
                        <button type="submit" class="pTwo ratingButton" id="p2" name="rate" value="p2">2</button>
                        <button type="submit" class="pThree ratingButton" id="p3" name="rate" value="p3">3</button>
                    </div>
                </form>

            </div> <!--prop Box: End-->
            {% endfor %}

В моем python views.py у меня есть это для моего фида:

@bp.route('/rate', methods=['POST','GET'])
def rate():
    if request.method == 'POST':
        note_list = ["m3", "m2", "m1", "z", "p1", "p2", "p3"]
        for i in note_list:
            titre = request.form["titre"]
            note = request.form['rate']
            if note == i:
                note = note_list.index(i)
                client.POSTS.rating.insert_one({"title" : titre, "rate" : note})
    return redirect(url_for('.proposer'))

Но хорошо, я получаю эту ошибку при нажатии на кнопку рейтинга:

Traceback (most recent call last):
  File "/Library/Python/3.7/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/3.7/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/Library/Python/3.7/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/3.7/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Library/Python/3.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/3.7/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Library/Python/3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/3.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/gabriel/Dropbox/Evrisops/Evrisops_Server/views/routes.py", line 252, in rate
    titre = request.form["titre"]
  File "/Library/Python/3.7/site-packages/werkzeug/datastructures.py", line 431, in __getitem__
    raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'titre'

В любом случае, я думаю, что проблема может быть только в «названии», но я не знаю, как это исправить ...

Кстати, вы, ребята, знаете, как добавить значение в массив в документе json? Использование операторов python и mongodb: /

Большое спасибо:)

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Ладно, нашел способ сделать это некоторое время назад Если это может помочь кому-либо: просто используйте request.form.get('') вместо request.form[''] Вместе со входом со скрытым свойством, чтобы получить значение Protion.title. :)

0 голосов
/ 25 апреля 2019

Я думаю, что ошибка исходит из этой строки:

titre = request.form["titre"]

У вас, вероятно, нет ключа titre в объекте request.form.Чтобы отладить это, я предлагаю добавить print request.form в цикл, чтобы вы могли видеть структуру объекта.

Более того, если request.form["titre"] пусто, это возможно потому, что вы устанавливаете value атрибут <p> элемента, который не разрешен в HTML.

В соответствии с этой страницей атрибут value нельзя установить для элемента <p>.Попробуйте переключиться на элемент <input>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...