Не получается отобразить данные из QuerySet в шаблонах Django
Пытаюсь реализовать простой поиск данных на сайте. Если в шаблоне "search_results.html" указываем тег a, то вся информация, которая в нём находятся не отображается, в случае же если убрать тег 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
файл model
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 %}
Думаю проблема в методе
def get_absolute_url(self):
return reverse('singlearticles', kwargs={'detail_slug': self.slug})
Неправильное имя параметра для роута или имя роута. Еще есть вариант что не произведена миграция и в таблице просто нет поля slug.
Пробуйте в шаблоне использовать тег url
<a href="{% url 'singlearticles' article.slug %}">{{ article.title }}</a>