Home > Enterprise >  How can I get my html to display my django model?
How can I get my html to display my django model?

Time:07-02

I'm trying to get my django model to be shown in the footer of my base.html but I can't get it to show up. I've looked at a few videos and I can't figure out where I'm going wrong. I know that the model works as I've made 4 entries in my database and I can view them on the admin page. The code also doesn't show any errors so I have nothing to go off of there. Here it is:

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 >
    </a>
{% endfor %}

CodePudding user response:

Look what you are passing as context:

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

It's QuerySet of SocialMediaPlatform objects. It means, that you can render them one by one with for loop:

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

You don't need to call SocialMediaPlatform model additionaly.

CodePudding user response:

in your view you use:

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

i can not see, if you are defined index.html Somethere in index you should have

{% extends base.htm %}

The second, i am agree with @Shabble:

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

The last: Try to use Django-GCBV TemplateView. Or ListView, in your case it is better:

somethere in views.py

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

somethere in urls.py

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

somethere in index.html

{% for smlink in object_list %}
    <a href="{{ smlink.name }}">
        <i >
    </a>
{% endfor %}
  • Related