Django : Недопустимый тег блока в строке 121: 'popular_products', ожидается 'endblock'. Вы забыли зарегистрировать или загрузить этот тег?
У меня есть пользовательский тег шаблона в моем проекте и все выглядит нормально, но когда я хочу использовать этот тег шаблона, я получаю эту ошибку:
Недопустимый тег блока в строке 122: 'popular_products', ожидается 'endblock'. Вы забыли зарегистрировать или загрузить этот тег?
base_tags.py:
from django import template
from django.db.models import Count, Q
from datetime import datetime, timedelta
from shop.models import Product
register = template.Library()
@register.inclusion_tag('shared/partials/popular_product_slider.html')
def popular_products():
last_week = datetime.today() - timedelta(days=7)
return {
"popular_products": Product.objects.filter(available=True).annotate(
count=Count('hits', filter=Q(producthit__date__gt=last_week))).order_by(
'-count', '-created')[:3]
}
шаблон home_page.html:
{% extends 'shared/_base.html' %}
{% load base_tags %}
{% load i18n %}
{% load render_partial %}
{% load static %}
{% load ratings %}
{% load thumbnail %}
<div class="row">
<div class="col-lg-12">
<div class="tab-content">
<div id="recent" class="tab-pane fade show active">
<div class="row product-slider">
{% popular_products %}
</div>
</div>
</div>
</div>
popular_product_slider.html
{% for product in popular_products %}
{{product.image}}
{{product.detail}}
{{product.title}}
{% endfor %}
views.py
def home_page(request):
context = {}
return render(request, 'Home_page.html', context)
вам нужно разместить ваш код в home_page.html в блоке. xxx - это название блока, который вы разместили в _base.html
{% block xxx %}
<div class="row">
<div class="col-lg-12">
<div class="tab-content">
<div id="recent" class="tab-pane fade show active">
<div class="row product-slider">
{% popular_products %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}
В какой-то момент вы реализовали что-то вроде {% block content %}. Вы должны закрыть его в конце:
{% block content %}
# things in that block/segment
{% endblock %} # or better: {% endblock content %}
он может быть в вашем основном шаблоне или в любом, который вы расширяете/включаете, например, в 'base.html'.