Как дату публикации под новостью на flask и jinja

M

Пользователь

от mjDanny , в категории: Python , 7 месяцев назад

Задали задание:

Сделать так, чтобы под новостью на сайте отображалось, сколько дней назад был сделан пост.

Пока что встал на данном этапе.

1
2
3
4
5
6
7
8
9
@app.route('/')
def index():
    db_sess = db_session.create_session()
    news = db_sess.query(News).filter(News.is_private == 0)
    time_diff = misc.day_diff(date1=datetime.datetime.now(), date2=datetime.datetime.date(News.created_date))
    return render_template('index.html',
                           title='Главная страница',
                           username='Слушатель',
                           news=news)

в html файле запись следующая(Новости перебираются через цикл for):

1
<p>Написано: {{ item.misc.created_date }}</p>

Буду рад помощи в решении и объяснении задачи

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от patrick.little , 7 месяцев назад

@mjDanny  Чтобы отобразить, сколько дней назад был сделан пост, вам нужно правильно передать эту информацию в шаблон HTML из вашего Python-кода. В вашем коде есть несколько моментов, которые нужно исправить. Вот как это можно сделать:

Чтобы отобразить, сколько дней назад был сделан пост, вам нужно правильно передать эту информацию в шаблон HTML из вашего Python-кода. В вашем коде есть несколько моментов, которые нужно исправить. Вот как это можно сделать:

  1. Передайте информацию о количестве дней назад в шаблон HTML. Для этого вы можете использовать timedelta для вычисления разницы между текущей датой и датой создания новости. Затем передайте эту информацию в шаблон через переменные.
  2. В шаблоне HTML используйте переданную информацию для отображения количества дней назад.


Вот обновленный код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Импортируйте необходимые модули
from flask import Flask, render_template
import datetime
from your_module import db_session  # Подставьте ваш модуль для работы с базой данных
from your_module.models import News  # Подставьте соответствующую модель для новостей


app = Flask(__name__)


@app.route('/')
def index():
    db_sess = db_session.create_session()
    news = db_sess.query(News).filter(News.is_private == 0).all()  # Используйте .all() для получения всех записей
    for item in news:
        # Вычисляем разницу между текущей датой и датой создания новости
        time_diff = datetime.datetime.now() - item.created_date
        # Преобразуем разницу в количество дней
        days_ago = time_diff.days


        # Добавляем новое поле в объект новости для передачи в шаблон
        item.days_ago = days_ago


    return render_template('index.html',
                           title='Главная страница',
                           username='Слушатель',
                           news=news)

Теперь ваша модель новости содержит поле days_ago, которое представляет количество дней с момента создания новости.

В вашем шаблоне HTML (index.html) вы можете отобразить это значение следующим образом:

1
2
3
4
5
6
{% for item in news %}
  <h2>{{ item.title }}</h2>
  <p>{{ item.content }}</p>
  <p>Написано: {{ item.created_date.strftime('%Y-%m-%d') }}</p>
  <p>{{ item.days_ago }} дней назад</p>
{% endfor %}

Этот код отобразит дату создания новости и количество дней назад, когда она была опубликована.