【发布时间】:2021-01-13 10:10:34
【问题描述】:
我是 django 的新手,我正在编写代码以及有关如何构建电子商务网站的 youtube 教程。我现在面临的挑战是:在我的产品页面上,有一个产品列表。我想要的是当用户点击特定产品时,我希望用户被重定向到具有该特定产品的自定义详细信息的页面(产品详细信息页面)。
这是我的代码结构。
在我的 views.py 文件中,我将“products1”作为我所有产品的页面视图,而“product_details”页面是我希望显示特定产品详细信息的地方
def products1(request):
products = Product.objects.all()
context = {'products':products}
return render(request, 'shopping_app/products1.html', context)
def product_details(request, id):
product = get_object_or_404(Product, id)
context = {'product': product}
return render(request, 'shopping_app/product_details.html', context)
在我的 urls.py 中。我像这样为以下页面创建了网址。
path('products1/', views.products1, name='products1'),
path('product_details/<int:id>', views.product_details, name='product_details'),
问题是每当我点击产品以将我重定向到详细信息页面时,都会引发 NoReverseMatch 错误。
这是抛出的错误
NoReverseMatch at /products1/
Reverse for 'product_details' with no arguments not found. 1
pattern(s) tried: ['product_details/(?P<id>[0-9]+)$']
Request Method: GET
Request URL: http://127.0.0.1:8000/products1/
Django Version: 3.1.4
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'product_details' with no arguments not found. 1
pattern(s) tried: ['product_details/(?P<id>[0-9]+)$']
*更新 我将 id(主键)添加到 url 中,然后我又回到了抛出的 TypeError
{% for product in products %}
<div class="w-52 text-left text-xs">
<a href="{% url 'product_details' product.id %}">
<img class="pb-2" src="{{ product.imageURL }}">
<h4 class="opacity-90">{{product.name}}</h4>
<span class="opacity-80">₦{{product.price|floatformat:2}}</span>
</a>
</div>
{% endfor product %}
这是我的产品页面的代码,将product.id添加到url后抛出的错误如下
TypeError at /product_details/1
product_details() got an unexpected keyword argument 'id'
Request Method: GET
Request URL: http://127.0.0.1:8000/product_details/1
Django Version: 3.1.4
Exception Type: TypeError
Exception Value:
product_details() got an unexpected keyword argument 'id'
我打算将我重定向到产品详细信息页面,并在该页面上显示特定产品的信息
【问题讨论】:
-
请您发布完整的错误。我还假设views.products4 应该是views.product1
-
我刚刚添加了抛出的错误
-
看起来您的模板是问题的原因,并且您没有将 ID(主键)传递到 url。您能否发布一下,因为这将有助于确认您正在传递它。您还需要将对 get_object_or_404 的调用更新为 get_object_or_404(Product, id=id) 否则您将触发另一个错误
-
我将 id 传入 url,不再抛出异常错误,而是类型错误。一会儿贴出来
-
成功了。感谢史蒂夫·马佩斯先生和 Shiv 先生的一百万,我非常感谢你们抽出时间来帮助我。我真的很感激
标签: python django django-views