多对一的Flask SqlAlchemy渲染

时间:2015-05-09 17:17:45

标签: python flask sqlalchemy flask-wtforms

我正在尝试为帖子创建类别。最终结果应该是用户在尝试发布时,他们选择一个类别,帖子属于该类别,因此可以在那里编入索引。例如,他们将继续使用example.com/category/Flask,他们会找到所有具有Flask类别的帖子。我在post模型中添加了category_id和category,然后创建了一个带有id和name的Category模型。然后创建了一个表单,以便我可以向类别表添加类别,以便用户可以开始为他们的帖子选择类别。对我有用的是我可以创建类别,在发布时选择它们,当我查看数据库表时,我可以看到这些帖子分配了类别。所以我现在要做的是为/ category /创建一个视图,我不知道该怎么做。

class CategoryForm(Form):
    name = StringField('Category name', validators=[DataRequired()])
    submit = SubmitField('Submit')

我创建了一个CategoryForm

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% import "_macros.html" as macros %}

{% block title %}Flasky{% endblock %}

{% block page_content %}

{{ wtf.quick_form(form) }}

{% endblock %}

Category.html

@main.route('/add_category', methods=['GET', 'POST'])
def add_category():
    form = CategoryForm()
    if form.validate_on_submit():
        category = Category(name=form.name.data)
        db.session.add(category)
        flash('A confirmation email jas been sent you.')
        return redirect(url_for('main.index'))
    return render_template('add_category.html', form=form)

分类视图

def enabled_categories():
    return Category.query.all()


class PostForm(Form):
    body = PageDownField("What's on your mind?", validators=[DataRequired()])
    category = QuerySelectField('Category', query_factory=enabled_categories,
                                allow_blank=True)
    submit = SubmitField('Submit')

然后在添加类别后,我用

编辑了PostForm
@main.route('/category/<name>')
def view_posts_in_category(name):
    name = Category.query.filter_by(name=name)
    return render_template('category.html', name=name)

这就是我创造的路线。

Iterator iterator = reqErrors.iterator();
while(iterator.hasNext()){
       sb.append(iterator.next().getMessage() + "\n");
}

现在在category.html'category / Flask'中如何显示Flask类别下的所有帖子?例如{{category.post}}?我该怎么用?

1 个答案:

答案 0 :(得分:2)

你快到了。您需要做的是对属于所选类别的帖子运行查询并将其添加到模板。它会是这样的:

@main.route('/category/<name>')
def view_posts_in_category(name):
    cat = Category.query.filter_by(name=name).first_or_404()
    return render_template('category.html', name=name, posts=cat.posts)