django TypeError:上下文必须是dict而不是str

ppcbkaq5  于 2023-03-09  发布在  Go
关注(0)|答案(1)|浏览(104)

我是新手,目前正在学习django,我有一个页面有一个会货:
URLS.PY

urlpatterns = [

    path("productsHTML/<str:uuid>", productHTML, name = "productHTML"),
    path("productsHTML/", productsHTML, name = "productsHTML")
]

VIEW.PY

def productsHTML(request):
    all_products = {"products": Product.objects.all()}
    return render(request, "products.html",all_products) 

def productHTML(request, uuid):
    product = Product.objects.get(id = uuid)
    
    value = [product.name, product.category, product.marka, product.privod, product.loshad_sila, product.box_peredach, product.volume_dvigatel]
    values = {"values": value}

    return render(request, "product.html", uuid, values)

PRODUCTS.HTML

{% block content %}
<h2>Продукты</h2>
<hr>
    {%if products %}
        {% for product in products %}
                        
            <p><b>Категоия: </b>{{ product.category}}</p>
            <p><b>Название: </b><a href="http://127.0.0.1:8000/productsHTML/{{ product.id }}">{{ product.name}}</a></p>
            <p><b>Цена: Бесплатно</p> 
            <hr> 

        {% endfor %}
            
    {% endif %}
        
{% endblock %}

PRODUCTS.HTML

{% extends 'products.html' %}

{% block title %}Продукт{% endblock %}

{% block content %} 
        {% if values %}
                {% for value in values %}
                    <p><b>Категоия: </b>{{ value.category }}</p>
                    <p><b>Название: </b>{{ value.name }}</p>
                    <p><b>Марка: </b>{{ value.marka }}</p>
                    <p><b>Привод: </b>{{ value.privod }}</p>
                    <p><b>Лошадиные силы: </b>{{ value.loshad_sila }}</p>
                    <p><b>Коробка передач: </b>{{ value.box_peredach }}</p>
                    <p><b>Объём двигателя: </b>{{ value.volume_dvigatel }}</p>
                    <p><b>Цена: Бесплатно</p> 
                
                {% endfor %}

            <button>КУПИТЬ</button>

        {% endif %}     
{% endblock %}

我需要单击产品名称中包含的链接,以重定向到地址为http://127.0.0.1:8000/productsHTML/产品ID的产品页面。如果需要,我可以提供其他信息。错误:TypeError:context必须是dict而不是string。提前感谢!
我已经为此挣扎了3天了,我试着用不同的方法传递变量到模板,但是没有用。

laik7k3q

laik7k3q1#

return render(request, "product.html", uuid, values)

问题在于,您传递uuid作为第三个参数,但是render()期望第三个参数是上下文字典。
为什么要将uuid传递给render()?模板似乎不需要它。

相关问题