Home > Mobile >  Django template doesn't display dictionary elements
Django template doesn't display dictionary elements

Time:09-27

I have a dictionary named Rooms. I am sending the dictionary elements to home.html

Views.py

from django.shortcuts import render

# Create your views here.

rooms = [
    {'id': 1, 'name': 'Lets learn Python!'},
    {'id': 2, 'name': 'Front-End Developer'},
    {'id': 3, 'name': 'Back-End Developer '},    
]

def home(request):
    context = {'rooms': rooms}
    return render(request, 'base/home.html', context)

def rooms(request, pk):
    room = None
    for i in rooms:
        if i['id'] == int(pk):
            room = i
    context = {'room': room}
    return render(request, 'base/room.html', context) 

home.html

{% extends 'main.html' %}

{% block content %}
<h1>Home Template</h1>

<div>
    <div>
        {% for room in rooms %}
            <div>
                <h5>{{room.id}} -- <a href="/room/{{room.id}}">{{room.name}}</a></h5>
            </div>
        {% endfor %} 
    </div>
</div>

{% endblock content %}

Home.html displays <h5> text but does not display the dictionary elements.I have tried renaming context variable.

CodePudding user response:

You need this bad boy room/<int:pk>/ in your urlpatterns

    from django.urls import path 
    from . import views  
    urlpatterns = [
        path('', views.home, name="Home"),
        path('room/<int:pk>/', views.rooms, name="Rooms")
    ]

CodePudding user response:

I realised that rooms(dict) and rooms(func) was colliding. I just renamed the func to room!

Updated Views.py

from django.shortcuts import render

# Create your views here.

rooms = [
    {'id': 1, 'name': 'Lets learn Python!'},
    {'id': 2, 'name': 'Front-End Developer'},
    {'id': 3, 'name': 'Back-End Developer '},    
]

def home(request):
    context = {'rooms': rooms}
    return render(request, 'base/home.html', context)

def room(request, pk):
    room = None
    for i in rooms:
        if i['id'] == int(pk):
            room = i
    context = {'room': room}
    return render(request, 'base/room.html', context) 
  • Related