在Flask中获取特定的帖子类别

时间:2019-01-16 14:02:48

标签: python flask

如果我的类别==学术(SelectField选择),我必须获得职位。但这是行不通的(帖子没有显示)。我该如何获取过帐数据或表单数据?

我尝试过

@categories.route("/category/academic")
def academic():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(
        Post.date_posted.desc()).filter(
        Post.category == "Academic").paginate(page=page, per_page=5)
    return render_template('academic.html', posts=posts)

@categories.route("/category/academic")
def academic():
    form = PostForm()
    page = request.args.get('page', 1, type=int)
    post = Post(title=form.title.data,
                content=form.content.data,
                category=form.category.data)
    posts = Post.query.order_by(
        Post.date_posted.desc()).order_by(
        post.category == "Academic").paginate(page=page, per_page=5)
    return render_template('academic.html', posts=posts)

@categories.route("/category/academic")
def academic():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(
        Post.date_posted.desc()).filter(
        **PostForm**.category == "Academic").paginate(page=page, per_page=5)
    return render_template('academic.html', posts=posts)

Post.category

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False,
                            default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    category = db.Column(db.String(50))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

PostForm.category

class PostForm(FlaskForm):
    title = StringField('Title', validators=[DataRequired()])
    content = TextAreaField('Content', validators=[DataRequired()])
    category = SelectField('Category', validators=[DataRequired()], choices=[(
        'Academic', 'Academic'), ('Art', 'Art')])
    submit = SubmitField('Post')

模板(category.html)##此帖子模板-显示category.html-所有模板

{% extends "layout.html" %} {% block content %} {% for post in posts.items %}
<article class="media content-section">
  <img
    class="rounded-circle article-img"
    src="{{ url_for('static', filename='profile_pics/' + post.author.image_file) }}"
  />
  <div class="media-body">
    <div class="article-metadata">
      <a
        class="mr-2"
        href="{{ url_for('users.user_posts', username=post.author.username) }}"
        >{{ post.author.username }}</a
      >
      <small class="text-muted">{{
        post.date_posted.strftime("%Y-%m-%d")
      }}</small>
      <small class="article-category">
        <mark
          ><a
            class="mr-2"
            href="{{ url_for('categories.category_route', category=post.category) }}"
            >{{ post.category }}</a
          ></mark
        >
      </small>
    </div>
    <h2>
      <a
        class="article-title"
        href="{{ url_for('posts.post', post_id=post.id) }}"
        >{{ post.title }}</a
      >
    </h2>
    <p class="article-content">{{ post.content }}</p>
  </div>
</article>
{% endfor %} {% for page_num in posts.iter_pages(left_edge=1, right_edge=1,
left_current=1, right_current=2) %} {% if page_num %} {% if posts.page ==
page_num %}
<a class="btn btn-info mb-4" href="{{ url_for('main.home', page=page_num) }}">{{
  page_num
}}</a>
{% else %}
<a
  class="btn btn-outline-info mb-4"
  href="{{ url_for('main.home', page=page_num) }}"
  >{{ page_num }}</a
>
{% endif %} {% else %} ... {% endif %} {% endfor %} {% endblock content %}

不起作用,因为帖子没有显示

1 个答案:

答案 0 :(得分:0)

这在这里很好用。我复制了您的模型和模板的一部分,出于测试目的对其进行了进一步简化。一切正常,浏览器中的结果可以很好地适应每页nr个项目。在下面的示例中,它设置为2,但也可以使用5。请记住,您只能使用模型和查询中涵盖的属性。当前,您对此有多个问题。我怀疑您的模板导致您看不到任何结果。

python代码:

page = request.args.get('page', 1, type = int)
posts = Post.query.filter_by(category = 'Academic').paginate(page=page, per_page=2)

模板:

{% extends "layout.html" %}
{% block content %}
{% for post in posts.items %}
    <a href="" > {{ post.title }} </a>
    <a href=""> {{ post.category }} </a>
    <p> {{ post.content }} </p>
{% endfor %}

{% for page_num in posts.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}

    {% if page_num %}
        {% if posts.page == page_num %}
            <a class="btn btn-info mb-4" href="{{ url_for('home.home', page = page_num) }}">{{ page_num }}</a>
        {% else %}
            <a class="btn btn-outline-info mb-4" href="{{ url_for('home.home', page = page_num) }}"> {{ page_num }} </a>
        {% endif %}
    {% endif %}
{% endfor %}
{% endblock content %}