Получение определенной категории сообщений в Flask - PullRequest
0 голосов
/ 16 января 2019

Я должен получить сообщение, если моя категория == академическая (выбор 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)
1010 * * и
@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 голосов
/ 17 января 2019

Ну, это прекрасно работает здесь. Я скопировал вашу модель и части вашего шаблона, которые я дополнительно упростил для целей тестирования. Все работает отлично, и в результате ваш браузер хорошо адаптируется к количеству элементов на странице. В приведенном ниже примере он установлен на 2, но работает и с 5. Помните, что вы можете использовать только те атрибуты, которые включены в модель и ваш запрос. В настоящее время у вас есть несколько вопросов по этому вопросу. Я подозреваю, что ваш шаблон вызывает то, что вы не видите никаких результатов.

код питона:

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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...