Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Wtforms hiddenfield, как получить значение [RSS Feed]

#1 Март 11, 2015 19:07:54

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

Привет, всем такой вопросик
есть форма, в которой я заполняю ответ на определенный вопрос


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%}
Как тут присвоить значение форме quest чтобы я мог его получить и использовать далее в базе.



Отредактировано Mazay_Ka (Март 11, 2015 19:08:27)

Офлайн

#2 Март 11, 2015 22:12:08

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

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%}

что это за безумие?
если ты передаешь обьект post в шаблон, значит он уже есть у тебя в вьюхе и тебе не нужно ничего делать в шаблоне

Офлайн

#3 Март 12, 2015 15:26:38

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

sander
там в шаблоне в цикле пишутся вопросы(post), потом когда я делаю ответ фугкцией answer, нужен post.id для того чтобы понять к какому вопросу приписать ответ.
Пардон может криво изьясняюсь.

Офлайн

#4 Март 12, 2015 17:33:37

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

я бы сделал как то так

@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)

Офлайн

#5 Март 12, 2015 21:24:43

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

Спасибо это именно то что спрашивал, красиво сделали)

Офлайн

#6 Март 12, 2015 22:34:54

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

Есть еще вариант. ajax. Немножко кода, но будет значительно элегантнее…

P.S. В формах можно явно передавать значение в поле, хотя с hidden я, честно говоря, не работал.

Отредактировано 4kpt_III (Март 12, 2015 22:52:36)

Офлайн

#7 Март 13, 2015 11:32:54

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

Пробывал js передавать, тоже получается норм.
Просто пытаюсь разобраться с этими формами как этому hidden присвоить значение, а потом его получить перерыл менюалы и так и не понял.

Офлайн

#8 Март 13, 2015 11:37:37

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

В обычное поле передается так.

{% for field in form %}
    {{ field(value=post.id) }}
{% endfor %}

C hidden нужно проверять. Но я думаю близко должно быть

Отредактировано 4kpt_III (Март 13, 2015 11:37:55)

Офлайн

#9 Март 13, 2015 19:19:47

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

sander
я бы сделал как то так

в вашем способе в итоге получается ошибка
q = models.Quest.query.get(post_id)

File “C:\Python27\lib\site-packages\sqlalchemy\orm\query.py”, line 798, in get

if len(ident) != len(mapper.primary_key):

TypeError: object of type ‘NoneType’ has no len()
а post_id все время None
хотя в урле его видно
http://127.0.0.1:5000/make_answer?post_id=2
функция
@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>

Офлайн

#10 Март 13, 2015 21:13:40

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Wtforms hiddenfield, как получить значение

Mazay_Ka
попробуй поменять местами роуты

Офлайн

  • Начало
  • » Web
  • » Wtforms hiddenfield, как получить значение[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version