Содержимое блока не отображается
Я хочу получить все сообщения из моей модели 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">•</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">•</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">•</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')
Я собираюсь сделать это для каждой из категорий, чтобы администратор сам решал, куда поместить каждое сообщение.