Возвращение более одной переменной при рендеринге в django

Я определяю home запрос в views.py,

db=client.inventory_data
def home(request):
    collection_data_1 = db['orders']
    mydata = list(collection_data.find())
    return render(request,'home.html',{'mydata': mydata})

Приведенная выше функция работает нормально, но когда я пытаюсь вернуть еще один список, она не работает.

def home(request):
    collection_data_1 = db['orders']
    collection_data_2 = db['product']
    mydata = list(collection_data_1.find())
    product_data = list(collection_data_2.find())
    return render(request,'home.html',{'mydata': mydata},{'product_data':product_data})

Я хочу вернуть оба списка, как этого добиться? Ищу доброй помощи.

def home(request):
    # ...
    return render(request,'home.html',{'mydata': mydata, 'product_data':product_data})

Вы можете просто объединить два словаря в один: {'mydata': mydata, 'product_data': product_data}

def home(request):
    collection_data_1 = db['orders']
    collection_data_2 = db['product']
    mydata = list(collection_data_1.find())
    product_data = list(collection_data_2.find())

    return render(request,'home.html',{'mydata': mydata, 'product_data': product_data})

Причина, по которой он не работал, когда вы передавали два словаря отдельно, заключается в том, что render принимает context (словарь) в качестве третьего аргумента и content_type (строку) в качестве четвертого аргумента, поэтому когда вы передавали два словаря, вы передавали словарь в качестве content_type.

Если это поможет, вот что у вас было изначально с аннотированными именами переменных:

render(
   request=request,
   template_name='home.html',
   context={'mydata':mydata},
   content_type={'product_data':product_data},
)

И вот что у вас есть сейчас:

render(
   request=request,
   template_name='home.html',
   context={'mydata': mydata, 'product_data': product_data}
)
def home(request):
    collection_data_1 = db['orders']
    collection_data_2 = db['product']
    mydata = list(collection_data_1.find())
    product_data = list(collection_data_2.find())
    context = {
     'mydata': mydata,
     'product_data': product_data
    }
    return render(request,'home.html', context=context)
Вернуться на верх