Как отобразить данные из двух классов моделей 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)
Вернуться на верх