Как отобразить данные из двух классов моделей Django в шаблоне по id?
Я новичок в django. Я пытаюсь сделать свое первое приложение под названием blog.Это приложение содержит два класса (со статьями) finnews и fingram, мне нужно отобразить все статьи finnews и fingram на одном шаблоне (я его получил). Мне также нужно, чтобы из этого шаблона пользователь, нажав на название статьи, переходил на шаблон с полным текстом статьи - и вот с этим у меня проблемы. Я читаю документацию и не могу понять, как решить проблему. Нажатие на заголовок finnews приводит к ошибке 404, а нажатие на заголовок fingram приводит к ошибке 'blogid() got an unexpected keyword argument 'id''. Пока что я читаю документацию и не могу понять, как это исправить.
urls.py для всех проектов
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py для приложения блога
def blogmain(request):
all_fingrams = Fingram.objects.order_by('-id')
all_finnewss = Finnews.objects.order_by('-id')
data = {
'all_fingrams': all_fingrams,
'all_finnewss': all_finnewss,
}
return render(request,'blog/financial-news.html', data)
def blogid(request):
single_fingram = get_object_or_404(Fingram, pk=id)
single_finnews = get_object_or_404(Finnews, pk=id)
data = {
'single_fingram' : single_fingram,
'single_finnews' : single_finnews,
}
return render(request,'blog/financialarticle.html', data)
urls.py для приложения блога
urlpatterns = [
path('', views.blogmain, name='blogmain'),
path('<int:id>', views.blogid, name='blogid'),
]
Модель приложения для блога
class Fingram(models.Model):
fingramarcticle_fullname = models.CharField()
fingramarcticle_shortname = models.CharField()
fingramarcticle_fulldesc = models.CharField()
fingramarcticle_shortdesc = models.CharField()
fingramarcticle_fulltext = models.CharField()
fingramarcticle_smallimg = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
fingramarcticle_bigimg = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
fingramarcticle_seoimg = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
fingramarcticle_tags = models.CharField()
fingramarcticle_titleseo = models.CharField()
fingramarcticle_descseo = models.CharField()
fingramarcticle_metakeywordsseo = models.CharField()
fingramarcticle_createddate = models.DateField(auto_now_add=True)
fingramarcticle_author = models.CharField()
def __str__(self):
return self.fingramarcticle_shortname
class Finnews(models.Model):
finnewsarcticle_fullname = models.CharField()
finnewsarcticle_shortname = models.CharField()
finnewsarcticle_fulldesc = models.CharField()
finnewsarcticle_shortdesc = models.CharField()
finnewsarcticle_fulltext = models.CharField()
finnewsarcticle_smallimg = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
finnewsarcticle_bigimg = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
finnewsarcticle_seoimg = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
finnewsarcticle_tags = models.CharField()
finnewsarcticle_titleseo = models.CharField()
finnewsarcticle_descseo = models.CharField()
finnewsarcticle_metakeywordsseo = models.CharField()
finnewsarcticle_createddate = models.DateField(auto_now=False, auto_now_add=False)
finnewsarcticle_author = models.CharField()
def __str__(self):
return self.finnewsarcticle_shortname
шаблон
{% for finnews in all_finnewss %}
<div class="col">
<div class="card border-light mb-3">
<img src="{{ finnews.finnewsarcticle_smallimg.url }}" class="card-img-top rounded-bottom-1" alt="..." >
<div class="card-body">
<a class="card-title" href="{% url 'blogid' finnews.id %}">{{finnews.finnewsarcticle_shortname}}</h5></a>
<p class="card-text">{{finnews.finnewsarcticle_shortdesc}}</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="container lfs">
<h1><a class="loadmore" href="{% url 'financialnews' %}">View all</h1></a>
</div>
<div class="container pt-3">
<h1 class="fingram">Fingram</h1>
</div>
<div class="container pt-3 pb-4">
<div class="row row-cols-1 row-cols-md-3 g-4">
{% for fingram in all_fingrams %}
<div class="col">
<div class="card border-light mb-3">
<img src="{{ fingram.fingramarcticle_smallimg.url }}" class="card-img-top rounded-bottom-1" alt="...">
<div class="card-body">
<a class="card-title" href="{% url 'blogid' fingram.id %}">{{fingram.fingramarcticle_shortname}}</h5></a>
<p class="card-text">{{fingram.fingramarcticle_shortdesc}}</p>
</div>
</div>
</div>
{% endfor %}
Пробовал разные виды, но ошибка сохраняется. Подскажите, пожалуйста, где я ошибаюсь?
def blogid(request,id): #You need to get the id here
single_fingram = get_object_or_404(Fingram, pk=id)
single_finnews = get_object_or_404(Finnews, pk=id)
data = {
'single_fingram' : single_fingram,
'single_finnews' : single_finnews,
}
return render(request,'blog/financialarticle.html', data)