Не удается отобразить данные из набора запросов в шаблонах Django

Я пытаюсь реализовать простой поиск данных на веб-сайте. Если мы укажем тег a в шаблоне "search_results.html", то вся информация, которая в нем есть, не будет отображаться, но если мы уберем тег a, то все заработает, почему это может произойти?

То есть эта информация для меня не отображается - <a href="{{ article.get_absolute_url }}">{{ article.title }}</a>

файл urls.py

urlpatterns = [
    path("search_page/", views.SearchPageView.as_view(), name="searchpageurl")
]

файл views.py

class SearchPageView(TemplateView):
    template_name = "search/search_results.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        query = self.request.GET.get("q", "")
        context["query"] = query

        if query:
            articles = ListArticles.objects.filter(
                Q(title__icontains=query) | Q(text__icontains=query), is_publish=True
            )
            context["results"] = {"articles": articles}
        else:
            context["results"] = {}

        return context

файл модель

class ListArticles(models.Model):
    title = models.CharField(max_length=100, verbose_name="Заголовок")
    text = models.TextField(verbose_name="Текст")
    images = models.ImageField(upload_to="articles/", verbose_name="Изображение")
    date_publsh = models.DateTimeField(verbose_name="Дата Публикации")
    date_modified = models.DateTimeField(auto_now=True)
    is_publish = models.BooleanField(verbose_name="Опубликованно/Неопубликованно")
    cats = models.ForeignKey(
        Category, on_delete=models.CASCADE, verbose_name="Категория"
    )
    slug = models.SlugField(max_length=100, verbose_name="Слаг")
    tag = models.ManyToManyField(Tag, related_name="articles", verbose_name="Теги")

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("singlearticles", kwargs={"detail_slug": self.slug})

файл search_results.html

{% extends 'base.html' %}

{% block content %}
<h1>Результаты поиска для "{{ query }}"</h1>


{% if results.articles %}
    <h2>Статьи:</h2>
    <ul>
        {% for article in results.articles %}
            <li><a href="{{ article.get_absolute_url }}">{{ article.title }}</a></li>
        {% empty %}
            <li>Статьи не найдены.</li>
        {% endfor %}
    </ul>
{% else %}
    <p>Ничего не найдено.</p>
{% endif %}
{% endblock %}

Я попытался полностью удалить get_absolute_url из шаблона и модели, в результате данные не отображаются. Единственное, что помогает, - это удалить либо тег a, либо удалить параметр href из тега a, после чего отображаются данные

Насколько я знаю, вы не можете использовать методы model внутри шаблонов.

Что вы можете сделать вместо этого, так это превратить этот метод в свойство, подобное этому:

@property
def absolute_url(self):
    return reverse("singlearticles", kwargs={"detail_slug": self.slug})

А затем используйте это в своем шаблоне следующим образом:

<ul>
    {% for article in results.articles %}
        <li><a href="{{ article.absolute_url }}">{{ article.title }}</a></li>
    {% empty %}
        <li>Статьи не найдены.</li>
    {% endfor %}
</ul>
Вернуться на верх