Содержимое блока не отображается

Я хочу получить все сообщения из моей модели Post в одном шаблоне представления (allposts.html), а все сообщения из категории politics в другом шаблоне представления (political.html), а затем отобразить их в разных разделах шаблона index.html. Однако я получаю пустую страницу. В чем может быть проблема? Вот мой код

index.html

 <!-- ======= Post Grid Section ======= -->
    
    <section id="posts" class="posts">
      <div class="container" data-aos="fade-up">
        <div class="row g-5">
          {% block allposts %}
          {% endblock %}
              <!-- Some sections skipped -->
<div>
              <div class="post-meta"><span class="date">Culture</span> <span class="mx-1">&bullet;</span> <span>Jul 5th '22</span></div>
              <h3><a href="single-post.html">What is the son of Football Coach John Gruden, Deuce Gruden doing Now?</a></h3>
              <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Distinctio placeat exercitationem magni voluptates dolore. Tenetur fugiat voluptates quas, nobis error deserunt aliquam temporibus sapiente, laudantium dolorum itaque libero eos deleniti?</p>
              <div class="d-flex align-items-center author">
                <div class="photo"><img src="assets/img/person-2.jpg" alt="" class="img-fluid"></div>
                <div class="name">
                  <h3 class="m-0 p-0">Wade Warren</h3>
                </div>
              </div>
            </div>
          </div>
          {% block content %}
          {% endblock %}

Вот содержание файла political.html, которое я пытаюсь отобразить

{% extends 'index.html' %}
{% block content %}
    {% for politics in politics %}
    <div class="row">
        <div class="post-entry-1 border-bottom">
        <a href="single-post.html"><img src="{{post.image.url}}" alt="" class="img-fluid"></a>
        <div class="post-meta"><span class="date">{{post.category}}</span> <span class="mx-1">&bullet;</span> <span>{{post.created_at}}</span></div>
        <h2 class="mb-2"><a href="single-post.html">{{post.title}}</a></h2>
        <span class="author mb-3 d-block">Ole Pundit</span>
        <p class="mb-4 d-block">{{post.body|truncatewords:75}}</p>
        </div>
    </div>
    {% endfor %}
{% endblock %}

And allposts.html

{% extends 'index.html' %}
{% block allposts %}
{% for post in posts %}
  <div class="post-entry-1 col-lg-4 box mx-1">
    <a href="single-post.html"><img src="{{post.image.url}}" class="post_img"></a>
      <div>
        <div class="post-meta"><span class="date">{{post.category}}</span> <span class="mx-1">&bullet;</span> <span>{{post.created_at}}</span></div>
        <h2><a href="">{{post.title}}</a></h2>
      </div>
    <p class="mb-4 d-block">{{post.body|truncatewords:75}}</p>

    <div class="d-flex align-items-center author">
      <div class="photo"><img src="{% static 'assets/img/person-1.jpg' %}" alt="" class="img-fluid"></div>
      <div class="name">
        <h3 class="m-0 p-0">OlePundit</h3>
      </div>
    </div>
  </div>
{% endfor %}
{% endblock %}

Вот мой models.py

from django.db import models
from datetime import datetime
from django_resized import ResizedImageField

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.CharField(max_length=1000000)
    created_at = models.DateTimeField(default=datetime.now, blank = True)
    image =  ResizedImageField(size=[250, 200], upload_to='img')
    category = models.CharField(max_length=100)

И мои урлы

from django.urls import path
from . import views
from django.conf.urls.static import static
from django.conf import settings
from django.contrib import admin

urlpatterns= [
    path('', views.index, name='index'),
    path('<category>/<str:pk>', views.post, name='post'),
    path('political', views.political, name='political'),
    path('allposts', views.allposts, name='allposts')
]

if settings.DEBUG:
     urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Пробовали ли вы это решение?

В файле political.html, в начале, просто добавьте

 {% block allposts %}
  {% endblock %}

И в файле allposts.html, добавьте этот синтаксис в конец вашего файла:

  {% block content %}
  {% endblock %}

В вашем файле political.html начинается цикл forloop

{% за политику в политике%}

Но затем внутри цикла forloop вы используете {{post.image}} {{post.title}} и т.д.

Все это должно быть politics, а не post. Похоже, что вы скопировали и вставили из allposts.html, создали правильное начало форлупа с politics, но не изменили остальную часть форлупа: {{politics.image.url}} {{politics.title}} ect...

Я обнаружил, что приложение работает в обратную сторону от того, что я ожидал. Я имею в виду, что данные отображаются на political.html и allposts.html. Это означает, что он просто использует index.html в качестве базового шаблона. Я думал, что данные должны отображаться на index.html, но все наоборот, блочные теги на index.html просто указывают серверу, куда должны отправляться данные. Поэтому я собираюсь работать регрессивно, т.е. продолжать расширять каждый из шаблонов, пока не создам окончательный шаблон со всеми разделами, и тогда я смогу использовать его в качестве целевой страницы. Я также создал отдельную модель для категории

class Politics(models.Model):
    title = models.CharField(max_length=100)
    body = models.CharField(max_length=1000000)
    created_at = models.DateTimeField(default=datetime.now, blank = True)
    image =  ResizedImageField(size=[250, 200], upload_to='img')

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

Вернуться на верх