Задали задание:
Сделать так, чтобы под новостью на сайте отображалось, сколько дней назад был сделан пост.
Пока что встал на данном этапе.
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> |
Буду рад помощи в решении и объяснении задачи
@mjDanny Чтобы отобразить, сколько дней назад был сделан пост, вам нужно правильно передать эту информацию в шаблон HTML из вашего Python-кода. В вашем коде есть несколько моментов, которые нужно исправить. Вот как это можно сделать:
Чтобы отобразить, сколько дней назад был сделан пост, вам нужно правильно передать эту информацию в шаблон HTML из вашего Python-кода. В вашем коде есть несколько моментов, которые нужно исправить. Вот как это можно сделать:
timedelta
для вычисления разницы между текущей датой и датой создания новости. Затем передайте эту информацию в шаблон через переменные.Вот обновленный код:
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 %} |
Этот код отобразит дату создания новости и количество дней назад, когда она была опубликована.