Как сделать фильтрацию постов по датам, которые постоянно будут меняться (как на сайте погоды)?

Ссылка скопирована
1 ответ

Моя задача: Сделать фильтрацию постов, через кнопки с датами.

Вот кнопки с датами:

Как сделать фильтрацию постов по датам, которые постоянно будут меняться (как на сайте погоды)?

А ниже должны располагаться некие посты и у каждого поста есть "дата публикации", на основе которой он отобразится.

Вот контекст:

class PostListView(ListView):     model = Post     template_name = 'main/main.html'     context_object_name = 'posts'      def get_queryset(self):         profile_list = Profile.objects.filter(address=self.request.user.profile.address)  # Получили список нужных нам         # профилей, здесь всё Ок, на это внимание не обращать          queryset = Post.objects.filter(author__profile__in=profile_list).order_by('-date_posted')  # Получ нужные posts, здесь тоже всё Ок          # Дальше я не знаю как и что делать, чтобы выполнить конечную <b>Задачу</b>          date_deli = (datetime.datetime.now() + datetime.timedelta(days=0)).date()  # Сегодняшняя дата         if self.request.POST.get('0'):             date_deli = (datetime.datetime.now() + datetime.timedelta(days=0)).date()         elif self.request.POST.get('1'):             date_deli = (datetime.datetime.now() + datetime.timedelta(days=1)).date()         elif self.request.POST.get('2'):             date_deli = (datetime.datetime.now() + datetime.timedelta(days=2)).date()          queryset = queryset.filter(date_deliver=date_deli)  # Достаем все посты с данной датой          return queryset

class PostListView(ListView): model = Post template_name = 'main/main.html' context_object_name = 'posts' def get_queryset(self): profile_list = Profile.objects.filter(address=self.request.user.profile.address) # Получили список нужных нам # профилей, здесь всё Ок, на это внимание не обращать queryset = Post.objects.filter(author__profile__in=profile_list).order_by('-date_posted') # Получ нужные posts, здесь тоже всё Ок # Дальше я не знаю как и что делать, чтобы выполнить конечную <b>Задачу</b> date_deli = (datetime.datetime.now() + datetime.timedelta(days=0)).date() # Сегодняшняя дата if self.request.POST.get('0'): date_deli = (datetime.datetime.now() + datetime.timedelta(days=0)).date() elif self.request.POST.get('1'): date_deli = (datetime.datetime.now() + datetime.timedelta(days=1)).date() elif self.request.POST.get('2'): date_deli = (datetime.datetime.now() + datetime.timedelta(days=2)).date() queryset = queryset.filter(date_deliver=date_deli) # Достаем все посты с данной датой return queryset

А вот, на всякий случай, код этих кнопок:

<div class="row">         <h3>{{ 0|addDays|date:"F" }}</h3>             <div class="col">                 <p>{{ 0|addDays|date:"D" }}</p>                 <a href=""><button type="button" name="0" class="btn btn-primary">{{ 0|addDays|date:"j" }}</button></a>             </div>             <div class="col">                 <p>{{ 1|addDays|date:"D" }}</p>                 <a href=""><button type="button" name="1" class="btn btn-primary">{{ 1|addDays|date:"j" }}</button></a>             </div>             <div class="col">                 <p>{{ 2|addDays|date:"D" }}</p>                 <a href=""><button type="button" name="2" class="btn btn-primary">{{ 2|addDays|date:"j" }}</button></a>             </div>             <div class="col">                 <p>{{ 3|addDays|date:"D" }}</p>                 <a href=""><button type="button" class="btn btn-primary">{{ 3|addDays|date:"j" }}</button></a>             </div>             <div class="col">                 <p>{{ 4|addDays|date:"D" }}</p>                 <a href=""><button type="button" class="btn btn-primary">{{ 4|addDays|date:"j" }}</button></a>             </div>             <div class="col">                 <p>{{ 5|addDays|date:"D" }}</p>                 <a href=""><button type="button" class="btn btn-primary">{{ 5|addDays|date:"j" }}</button></a>             </div>             <div class="col">                 <p>{{ 6|addDays|date:"D" }}</p>                 <a href=""><button type="button" class="btn btn-primary">{{ 6|addDays|date:"j" }}</button></a>             </div>         </div>

<div class="row"> <h3>{{ 0|addDays|date:"F" }}</h3> <div class="col"> <p>{{ 0|addDays|date:"D" }}</p> <a href=""><button type="button" name="0" class="btn btn-primary">{{ 0|addDays|date:"j" }}</button></a> </div> <div class="col"> <p>{{ 1|addDays|date:"D" }}</p> <a href=""><button type="button" name="1" class="btn btn-primary">{{ 1|addDays|date:"j" }}</button></a> </div> <div class="col"> <p>{{ 2|addDays|date:"D" }}</p> <a href=""><button type="button" name="2" class="btn btn-primary">{{ 2|addDays|date:"j" }}</button></a> </div> <div class="col"> <p>{{ 3|addDays|date:"D" }}</p> <a href=""><button type="button" class="btn btn-primary">{{ 3|addDays|date:"j" }}</button></a> </div> <div class="col"> <p>{{ 4|addDays|date:"D" }}</p> <a href=""><button type="button" class="btn btn-primary">{{ 4|addDays|date:"j" }}</button></a> </div> <div class="col"> <p>{{ 5|addDays|date:"D" }}</p> <a href=""><button type="button" class="btn btn-primary">{{ 5|addDays|date:"j" }}</button></a> </div> <div class="col"> <p>{{ 6|addDays|date:"D" }}</p> <a href=""><button type="button" class="btn btn-primary">{{ 6|addDays|date:"j" }}</button></a> </div> </div>

Дополнительно:

Кнопки сделать ссылками, на ссылку повесить
<a href="?date=2023-05-01">23 мая</a>
На вьюехе взять из параметра дату

date = self.request.GET.get("date",dt.date.today()) qs = Post.objects.filter(date_deliver=date)

date = self.request.GET.get("date",dt.date.today()) qs = Post.objects.filter(date_deliver=date)

p.s. пример упрощен. Его нужно доделать

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

Для реализации фильтрации постов по датам, которые постоянно меняются, как на сайте погоды, вам понадобится использовать динамический подход. Вам нужно будет создать функцию, которая будет получать текущую дату и время, а затем сравнивать её с датой и временем каждого поста для определения их актуальности.

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

Пример реализации на PHP:

function filterPostsByDate($posts) {
    $filteredPosts = array();
    $currentDateTime = date('Y-m-d H:i:s');
 
    foreach($posts as $post) {
        if($post['publish_date']  'Post 1', 'content' =&gt; 'Content 1', 'publish_date' =&gt; '2022-01-01 12:00:00'),
    array('title' =&gt; 'Post 2', 'content' =&gt; 'Content 2', 'publish_date' =&gt; '2022-01-02 15:30:00'),
    array('title' =&gt; 'Post 3', 'content' =&gt; 'Content 3', 'publish_date' =&gt; '2022-01-03 10:45:00')
);
 
$filteredPosts = filterPostsByDate($posts);
 
foreach($filteredPosts as $post) {
    echo '<h2>' . $post['title'] . '</h2>';
    echo '<p>' . $post['content'] . '</p>';
}

function filterPostsByDate($posts) { $filteredPosts = array(); $currentDateTime = date('Y-m-d H:i:s'); foreach($posts as $post) { if($post['publish_date'] 'Post 1', 'content' =&gt; 'Content 1', 'publish_date' =&gt; '2022-01-01 12:00:00'), array('title' =&gt; 'Post 2', 'content' =&gt; 'Content 2', 'publish_date' =&gt; '2022-01-02 15:30:00'), array('title' =&gt; 'Post 3', 'content' =&gt; 'Content 3', 'publish_date' =&gt; '2022-01-03 10:45:00') ); $filteredPosts = filterPostsByDate($posts); foreach($filteredPosts as $post) { echo '<h2>' . $post['title'] . '</h2>'; echo '<p>' . $post['content'] . '</p>'; }

Этот код сначала определяет текущую дату и время, затем проходит по всем постам и добавляет только те, у которых дата публикации не превышает текущую дату и время, в новый массив $filteredPosts. Наконец, он выводит отфильтрованные посты на экран.

Таким образом, вы сможете реализовать фильтрацию постов по датам, которые постоянно меняются, на вашем сайте, как это делается на сайте погоды.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно