6

Flask に単一ページのサイトがあり、下部に連絡先フォームがあります。送信時にブラウザーがページの先頭にジャンプしないようにするにはどうすればよいですか? 実際には明示的な JavaScript が発生していないため、return false は使用できません。Flask の WTForms を使用しています。

<section id="contact">
<h2 class='contact'>Contact</h2>

{% if success %}
<p>Thanks for your message!</p>

{% else %}

{% for message in form.name.errors %}
<div class="flash">{{ message }}</div>

{% endfor %}

{% for message in form.email.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}

{% for message in form.subject.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}

{% for message in form.message.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}

<form id="contactform" action="{{ url_for('contact') }}" method=post>
{{ form.hidden_tag() }}

## "autofocus=true" is to reload at the form on unsuccessful submission. ##

{{ form.name.label }}
{{ form.name(autofocus=true, placeholder="Jimmy Hoffa")}}

{{ form.email.label }}
{{ form.email(placeholder="xXxSparklePony1xXx@aol.com") }}

{{ form.subject.label }}
{{ form.subject }}

{{ form.message.label }}
{{ form.message }}

{{ form.submit }}
</form>
{% endif %}
</section>
</section>

そして、ここに私のforms.pyとmain.pyがあります:

フォーム.py

from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField, validators, ValidationError

class ContactForm(Form):
name = TextField("Name", [validators.Required("Please enter your name!")])
email = TextField("Email", [validators.Required("Please enter your email!"),       validators.Email("Enter a real email!")])
subject = TextField("Subject", [validators.Required("Please enter a subject!")])
message = TextAreaField("Message", [validators.Required("Please enter a message!")])
submit = SubmitField("Send")

main.py

@app.route('/', methods=['GET', 'POST'])
def contact():
form = ContactForm()

if request.method == 'POST':
    if form.validate() == False:
        flash('All fields are required.')
        return render_template('home.html', form=form)
    else:
        msg = Message(form.subject.data, recipients=['me@gmail.com'])
        msg.body = """
        From %s <%s>
        %s""" % (form.name.data, form.email.data, form.message.data)
        mail.send(msg)

        return render_template('home.html', success=True)

elif request.method == 'GET':
    return render_template('home.html', form=form)

if __name__=='__main__':
app.run(debug=True)

render_template('home.html#contact') を返したいのですが、できません。

ソリューションが非常に単純でなければならないことはわかっていますが、私は正確には Flask (または jQuery) の専門家ではありません。また、messenger.js のように、送信が成功したときに警告メッセージが表示されれば満足ですが (これもわかりません)、連絡先セクションで自動的にリロードされるようにしたいだけです。

私も試しました

{% if success %}
<script>$.load('/ #contact')</script>

しかし、それもうまくいきませんでした。

4

2 に答える 2

2

フォームの送信にjquery ajax requestを使用する方がはるかに良いでしょう-それは2つの問題を解決します:

  • あなたのページはまったく更新されません
  • ユーザーエクスペリエンスの向上

http://www.techillumination.in/2014/08/python-flask-and-jquery-ajax-post.html

ajaxから投稿されたデータをフラスコで使用するにはどうすればよいですか?

于 2014-10-10T22:40:21.093 に答える