Как я могу заставить мой html отображать мою модель django?

Я пытаюсь заставить мою модель django отображаться в нижнем колонтитуле моего base.html, но я не могу заставить ее отображаться. Я просмотрел несколько видео и не могу понять, где я ошибаюсь. Я знаю, что модель работает, так как я сделал 4 записи в своей базе данных и могу просмотреть их на странице администратора. Код также не показывает никаких ошибок, так что мне не на что ориентироваться. Вот он:

Models.py

class SocialMediaPlatform(models.Model):
    name = models.CharField(max_length=50, blank=True, null=True)
    font_awesome_class = models.CharField(max_length=50, blank=True, null=True)
    base_url = models.CharField(max_length=50, blank=True, null=True, 
    default='https://instagram.com/ or https://tiktok.com/@')

    def __str__(self):
        return self.base_url

Views.py

def social_media_base_view(request):
    context = {}
    smbase = SocialMediaPlatform.objects.all()
    context['smbase'] = smbase

    return render(request, 'index.html', context)

Urls.py

urlpatterns = [
    path('', views.social_media_base_view),
]

Admin.py

@admin.register(SocialMediaPlatform)
class SocialPlatformAdmin(admin.ModelAdmin):

    list_display = ('name', 'font_awesome_class', 'base_url')

base.html

{% for smlink in smbase %}
    <a href="{{ smlink.SocialMediaPlatform.name }}">
        <i class="{{ smlink.SocialMediaPlatform.font_awesome_class }}">
    </a>
{% endfor %}

Посмотрите, что вы передаете в качестве контекста:

def social_media_base_view(request):
    ...
    smbase = SocialMediaPlatform.objects.all()
    context['smbase'] = smbase
    return ...

Это QuerySet из SocialMediaPlatform объектов. Это означает, что вы можете рендерить их по одному с помощью цикла for:

{% for smlink in smbase %}
    {{ smlink.name }}
{% endfor %}

Вам не нужно вызывать SocialMediaPlatform модель дополнительно.

В вашем представлении вы используете:

return render(request, 'index.html', context)

я не могу понять, определены ли вы index.html. Где-то в индексе у вас должно быть

{% extends base.htm %}

Во-вторых, я согласен с @Shabble:

{% for smlink in smbase %}
    <a href="{{ smlink.name }}">
        <i class="{{ smlink.font_awesome_class }}">
    </a>
{% endfor %}

Последнее: Попробуйте использовать Django-GCBV TemplateView. Или ListView, в вашем случае это лучше:

somethere in views.py

Class MyListView(ListView):
    model = SocialMediaPlatform
    template_name = index.html

somethere in urls.py

urlpatterns = [
    path('', MyListView.as_view()),
]

сомета в index.html

{% for smlink in object_list %}
    <a href="{{ smlink.name }}">
        <i class="{{ smlink.font_awesome_class }}">
    </a>
{% endfor %}
Вернуться на верх