如何在烧瓶

时间:2015-06-21 06:25:12

标签: python flask wtforms

我正在开发一个博客应用程序。在html文件中显示帖子有评论选项。但我无法检索ORM对象' post'在提交表格时对应评论表。 我的index.html文件:

{% extends "base.html" %}
{% block content %}


     <h1>Hi, {{ g.user.nickname }}!</h1>
     <form action="" method="post" name="post">
       {{ form.hidden_tag() }}
       <table>
           <tr>
               <td>Say something:</td>
           </tr>
       <tr>
               <td>Title</td>
               <td>{{ form.title(size=30, maxlength=140) }}</td>
               <td>
               {% for error in form.title.errors %}
               <span style="color: red;">[{{ error }}]</span><br>
               {% endfor %}
               </td>
           </tr>

       <tr>
               <td>Content</td>
               <td>{{ form.post(size=30, maxlength=2000) }}</td>
               <td>
               {% for error in form.post.errors %}
               <span style="color: red;">[{{ error }}]</span><br>
               {% endfor %}
               </td>
           </tr>

           <tr>
               <td></td>
               <td><input type="submit" name="btn" value="Post!"></td>
               <td></td>
           </tr>
       </table>
     </form>


     {% for post in posts.items %}
    <div class="{{ post.id }}">

       <div>
             {% include 'post.html' %}
       </div>
       <hr>
       <div class="row-fluid">
         <div class="span11 offset1"> 
           <div class="comments">
                 {% if post.comments %}
                     <p>
                     {% for comment in post.comments %}
                        <p><i>{{ comment.name }}</i>:  {{ comment.body }}</p>
                     {% endfor %}
                     </p>
                 {% endif %}
           </div>
         </div>
       </div>

       <div>
         <form action="" method="post" name="post">
                {{ form.hidden_tag() }}
        <input type="hidden" name="p_id" value="{{post}}">
            <table>
                <tr>
                        <td>Add a comment:</td>
                </tr>
            <tr>
                        <td>Name</td>
                        <td>{{ form.title(size=30, maxlength=40) }}</td>
                        <td>
                            {% for error in form.title.errors %}
                                <span style="color: red;">[{{ error }}]</span><br>
                            {% endfor %}
                        </td>
                </tr>

            <tr>
                        <td>Comment</td>
                        <td>{{ form.post(size=30, maxlength=140) }}</td>
                        <td>
                            {% for error in form.post.errors %}
                                <span style="color: red;">[{{ error }}]</span><br>
                            {% endfor %}
                        </td>
                </tr>

                <tr>
                        <td></td>
                        <td><input type="submit" name="btn" value="Comment"></td>
                        <td></td>
                </tr>
            </table>
            </form> 
       </div>

    </div>
     {% endfor %}


     {% if posts.has_prev %}<a href="{{ url_for('index', page=posts.prev_num) }}">&lt;&lt; Newer posts</a>{% else %}&lt;&lt; Newer posts{% endif %} | 
{% if posts.has_next %}<a href="{{ url_for('index', page=posts.next_num) }}">Older posts &gt;&gt;</a>{% else %}Older posts &gt;&gt;{% endif %}

{% endblock %}

视图文件有:

@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@app.route('/index/<int:page>', methods=['GET', 'POST'])
@login_required
def index(page=1):
    form = PostnCommentForm()
    if form.validate_on_submit():
      if request.form['btn'] == 'Post!':
        post = Post(title=form.title.data, body=form.post.data, timestamp=datetime.utcnow(), author=g.user)
        db.session.add(post)
        db.session.commit()
        flash('Your post is now live!')
        return redirect(url_for('index'))
      else:    
        comment = Comment(name=form.title.data, body=form.post.data, timestamp=datetime.utcnow(), parent_post=form.p_id.data)
        db.session.add(comment)
        db.session.commit()
        flash('Your comment is now live!')
        return redirect(url_for('index'))
    posts = g.user.blog_posts().paginate(page, POSTS_PER_PAGE, False)
    return render_template('index.html',
                           title='Home',
                           form=form,
                           posts=posts)

型号:

class Post(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(140))
    body = db.Column(db.String(2000))
    timestamp = db.Column(db.DateTime)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    comments = db.relationship('Comment', backref='parent_post', lazy='dynamic')

    def __repr__(self):
        return '<Post %r>' % (self.body)

class Comment(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(40))
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))

Form.py文件:

from flask.ext.wtf import Form
from wtforms import StringField, BooleanField, TextAreaField, IntegerField
from wtforms.validators import DataRequired, Length
from app.models import User

class PostnCommentForm(Form):
post = StringField('post', validators=[DataRequired()])
title = StringField('title', validators=[DataRequired()])
p_id= IntegerField('p_id')

1 个答案:

答案 0 :(得分:1)

如果您已将post_id作为隐藏字段,则检索它时会出现什么问题。

你可以检索它

comment = Comment(name=form.title.data, body=form.post.data, timestamp=datetime.utcnow(),title = form.post_id.data )

我建议post_id = form.post_id.data而不是title = form.post_id.data