Файл Django не отображает входные данные на сайте

Ранее у меня была похожая проблема с неправильной итерацией кода для вывода таблицы, но теперь я пробую список описаний, и он не показывает ни одного из моих входных данных. Любая помощь будет очень признательна!

Views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import products, typeWork


def hello(request):
    context = typeWork.objects.all()
    context2 = {'context':context}
    return render(request, 'products/index.html', context2)

def detail(request, product_id):
    context3 = typeWork.objects.get(id=product_id)
    context4 = {'context3':context3}
    return render(request, 'products/detail.html', context4)

Detail.html

{% extends 'base.html' %}

{% block content %}
    <dl>
        <dt>Work</dt>
        <dd>{{context4.work}}</dd>
        <dt>Type of Work</dt>
        <dd>{{context4.genre}}</dd>
    </dl>



{% endblock  %}

Рабочий код для таблицы (как будто он показывает входные данные в таблице, просто добавляю, чтобы посмотреть, может ли это дать какое-то понимание того, почему detail.html не показывает входные данные

index.html

{% extends 'base.html' %}

{% block content %}
    <table class="table table-bordered table-hover">
        <thead>
            <tr>
                <th>Work</th>
                <th>Type of Work</th>
                <th>Hours needed</th>
            </tr>
        </thead>
        <tbody>
            {% for context2 in context%}
                <tr>
                    <td>{{context2.work}}</td>
                    <td>{{context2.genre}}</td>
                    <td>{{context2.hoursWorked}}</td>
                </tr>
            {% endfor %}
        
        </tbody>
    
    </table>
{% endblock  %}

Фотография моей актуальной проблемы Actual issue

Фотография рабочего столаThis is the working table

Это скорее просьба о разъяснении я изменил views.py на следующий код я просто хотел бы получить разъяснение почему это работает и честно говоря я думал что я пробовал это раньше я думаю что нет так как это работает сейчас

from django.shortcuts import render
from django.http import HttpResponse
from .models import products, typeWork


def hello(request):
    context = typeWork.objects.all()
    context2 = {'context':context}
    return render(request, 'products/index.html', context2)

def detail(request, product_id):
    context3 = typeWork.objects.get(id=product_id)
    context4 = {'context4':context3}
    return render(request, 'products/detail.html', context4)

Мне кажется, вы немного путаете вещи, называя все контекстом1 или контекстом4.

Контекст - это то, что передается в шаблон, и в основном это словарь переменных, которые могут быть кверисетами, строками, другими словарями или чем-то еще. Итак, что вы сделали вначале (для перевода с более четкими именами переменных):

def detail(request, product_id):
    type_of_work = typeWork.objects.get(id=product_id)
    context = {'type_of_work_context':type_of_work}
    return render(request, 'products/detail.html', context)

и затем, по вашему мнению, вы сослались на

<dd>{{context.work}}</dd>

вместо

<dd>{{type_of_work_context.work}}</dd>

Во втором примере, который сработал в вашем ответе, вы фактически дали контексту dict то же имя, что и записи в нем, так что довольно удачно, что это сработало.

Просто в качестве стилистической рекомендации, называйте контекстную дикту "контекстом", а элементы внутри нее более узнаваемыми именами, отражающими их содержание.

Вернуться на верх