I am developing a blog application in flask. In html file to display posts 
there is option for commenting. But I am not able to retrieve the ORM 
object 'post' corrresponding to comment form while submitting form. My 
index.html file:

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

And view file have this:

@app.route('/', methods=['GET', 'POST'])@app.route('/index', methods=['GET', 
'POST'])@app.route('/index/<int:page>', methods=['GET', 
'POST'])@login_requireddef 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)

Model:

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 file:

from flask.ext.wtf import Formfrom wtforms import StringField, BooleanField, 
TextAreaField, IntegerFieldfrom wtforms.validators import DataRequired, 
Lengthfrom app.models import User
class PostnCommentForm(Form):
post = StringField('post', validators=[DataRequired()])
title = StringField('title', validators=[DataRequired()])
p_id= IntegerField('p_id')

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to