首页 > 解决方案 > 如何按日期对帖子进行排序(FLASK、PYTHON、SQLALCHEMY)

问题描述

我想知道如何按上传的数据对主页上显示的帖子进行排序,我将日期保存到数据库中的每个帖子。目前,它们按字母顺序显示。

这是我想显示图像的页面的路线

回家路线:


@views.route("/")
def home():
    title = Post.query.get("title")
    date = Post.query.get("date")
    images = os.listdir(os.path.join(staticpath, "uploads"))
    return render_template('home.html', images=images, user=current_user, title=title, date=date, Post=Post, User=User)

我想按日期显示图像的页面的 HTML

网页:

{% extends "base.html" %}
{% block title %}home{% endblock %}
{% block content %}



<section class="list">
  {% for image in images %}
    <p> title: {{ Post.query.filter_by(name=image).first().title }}</p>
    <p> date: {{ Post.query.filter_by(name=image).first().date}}</p>
    <p> OP ID: {{ Post.query.filter_by(name=image).first().user_id}}
    <section class="col-md-3 col-sm-6" >
      <img src="{{ url_for('static', filename='uploads/' + image) }}"width = 530>

    </section>



    <a href="{{ url_for('static', filename='uploads/' + image) }}" style="absolute: 600;" download>{{ image }}</a>


    <p class="solid" style="border-style: solid;"></p>
  {% endfor %}
</section>


{% endblock %}

这是存储帖子的数据库,它包括日期

数据库模型:


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    date = db.Column(db.DateTime(timezone=True), default = func.now())
    minetype = db.Column(db.Text, nullable=False)
    name = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

标签: pythonflasksqlalchemy

解决方案


我将按照以下方式更改处理程序和模板,这将允许您实现:

  • 所有Posts 将在一个查询中加载,并立即排序
  • 您不会在模板中进行数据库查询,从而更清晰地分离关注点
def home():
    title = Post.query.get("title")
    date = Post.query.get("date")
    # images below are list of strings
    images = os.listdir(os.path.join(staticpath, "uploads"))
    # images below is a collection of `Post` instances (and it is sorted)
    images = Post.query.filter(Post.name.in_(images)).order_by(Post.date)
    return render_template('home.html', images=images, user=current_user, title=title, date=date, Post=Post, User=User)

并且您的模板将更改如下:


{% extends "base.html" %}
{% block title %}home{% endblock %}
{% block content %}

<section class="list">
  {% for image in images %}
    <p> title: {{ image.title }}</p>
    <p> date: {{ image.date }}</p>
    <p> OP ID: {{ image.user_id }}</p>
    <section class="col-md-3 col-sm-6" >
      <img src="{{ url_for('static', filename='uploads/' + image.name) }}" width = 530>
    </section>

    <a href="{{ url_for('static', filename='uploads/' + image.name) }}" style="absolute: 600;" download>{{ image }}</a>

    <p class="solid" style="border-style: solid;"></p>
  {% endfor %}
</section>

{% endblock %}

推荐阅读