Форум сайта python.su
Привет, всем такой вопросик
есть форма, в которой я заполняю ответ на определенный вопрос
class AnswerForm(Form): text = StringField('Answer', widget=TextArea(), validators = [DataRequired()]) quest = HiddenField('Quest') @app.route('/answer', methods = ['POST', 'GET']) def answer(): a_form = AnswerForm() if a_form.validate_on_submit(): answer = a_form.text.data quest = a_form.quest.data # сюда в темплейте присвоить значение чтобы я тут его мог обработать print answer, quest
{% for answer in post.answer%} <form action="{{url_for('answer')}}" method='post' name='answer'> {{ a_form.hidden_tag() }} <tr id = "{{post.id}}"><td>{{a_form.text}} {{a_form.quest(data=post.id)}}</td></tr> <tr><td><input type="submit" value="Answer"/></td></tr> </form> {%endfor%}
Отредактировано Mazay_Ka (Март 11, 2015 19:08:27)
Офлайн
Mazay_Ka
{% for answer in post.answer%}
<form action=“{{url_for('answer')}}” method='post' name='answer'>
{{ a_form.hidden_tag() }}
<tr id = “{{post.id}}”><td>{{a_form.text}}
{{a_form.quest(data=post.id)}}</td></tr>
<tr><td><input type=“submit” value=“Answer”/></td></tr>
</form>
{%endfor%}
Офлайн
sanderтам в шаблоне в цикле пишутся вопросы(post), потом когда я делаю ответ фугкцией answer, нужен post.id для того чтобы понять к какому вопросу приписать ответ.
Офлайн
я бы сделал как то так
@app.route('/answer', methods = ['GET']) @app.route('/answer/<int:post_id>', methods = ['POST']) def answer(post_id=None): a_form = AnswerForm() if a_form.validate_on_submit(): # получаем необходимый пост post = PostModel.query.get_or_404(post_id) # если используется flask-sqlalchemy answer = a_form.text.data
<form action="{{ url_for('answer', post_id=post.id) }} method="post"> {{ a_form.hidden_tag() }} <tr><td>{{a_form.text}}</td></tr> <tr><td><input type="submit" value="Answer"/></td></tr> </form>
Отредактировано sander (Март 12, 2015 17:34:04)
Офлайн
Спасибо это именно то что спрашивал, красиво сделали)
Офлайн
Есть еще вариант. ajax. Немножко кода, но будет значительно элегантнее…
P.S. В формах можно явно передавать значение в поле, хотя с hidden я, честно говоря, не работал.
Отредактировано 4kpt_III (Март 12, 2015 22:52:36)
Офлайн
Пробывал js передавать, тоже получается норм.
Просто пытаюсь разобраться с этими формами как этому hidden присвоить значение, а потом его получить перерыл менюалы и так и не понял.
Офлайн
В обычное поле передается так.
{% for field in form %} {{ field(value=post.id) }} {% endfor %}
Отредактировано 4kpt_III (Март 13, 2015 11:37:55)
Офлайн
sander
я бы сделал как то так
@app.route('/make_answer', methods = ['POST', 'GET']) @app.route('/make_answer/<int:post_id>', methods = ['POST']) @login_required def answer(post_id = None): t_body = str(datetime.datetime.now()).split('.') t= t_body[0] a_form = AnswerForm() if a_form.validate_on_submit(): answer = a_form.text.data print post_id q = models.Quest.query.get(post_id) a = models.Answer(body=answer, time=datetime.datetime.now(), author = g.user, quest = q, t_body = t)
<form action="{{ url_for('answer', post_id = post.id) }}" method='post'> {{ a_form.hidden_tag() }} <tr id = "{{post.id}}"><td>{{a_form.text}}</td></tr> <tr><td><input type="submit" value="Answer"/></td></tr> </form>
Офлайн
Mazay_Ka
попробуй поменять местами роуты
Офлайн