Django项目实现商品详情页动态跳转功能技术求助
实现Django商品详情页的动态链接功能
我来帮你一步步搞定这个需求,先梳理下你现有代码里的问题,再逐个修正实现:
1. 先修正Models.py的基础错误
你的Product类继承对象错了,应该继承models.Model,而且FloatField不需要max_length参数,顺便加个__str__方法方便后台管理:
# models.py from django.db import models class Product(models.Model): # 这里要继承models.Model,不是request! name = models.CharField(max_length=255) cost = models.FloatField() # FloatField不需要max_length参数 info = models.CharField(max_length=2000) def __str__(self): return self.name # 可选,在admin后台能直接看到商品名称,方便管理
2. 配置URL路由,新增详情页地址
你需要在app的urls.py里添加一个详情页的路由,用商品ID作为动态参数:
# urls.py(你的app下的urls文件) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), # 新增这条:用<int:product_id>接收商品ID,对应视图函数的参数 path('product/<int:product_id>/', views.product_detail, name='product-detail'), ]
3. 重写视图函数,新增详情页逻辑
原来的information视图逻辑完全不对,我们重新写一个product_detail视图,通过商品ID精准获取对应商品:
# views.py from django.shortcuts import render, get_object_or_404 from .models import Product def index(request): products = Product.objects.all() return render(request, 'index.html', {'products': products}) # 新增详情页视图:通过product_id参数获取商品,找不到就返回404 def product_detail(request, product_id): # get_object_or_404比直接get更友好,避免抛出DoesNotExist异常 product = get_object_or_404(Product, id=product_id) return render(request, 'product_detail.html', {'product': product})
4. 修改index.html,给商品添加动态链接
你的模板里有两个小错误:<l1>是拼写错误,应该是<li>;{{ product.price }}要改成{{ product.cost }}(因为models里的字段是cost)。然后用Django的{% url %}模板标签生成动态链接:
<!-- index.html --> <ul> {% for product in products %} <li> <!-- 用{% url '路由名称' 商品ID %}生成动态链接 --> <a href="{% url 'product-detail' product.id %}">{{ product.name }} ${{ product.cost }}</a> </li> {% endfor %} </ul>
5. 创建详情页模板product_detail.html
最后新建一个详情页模板,展示商品的详细信息:
<!-- product_detail.html --> <h1>{{ product.name }}</h1> <p>价格: ${{ product.cost }}</p> <p>商品详情: {{ product.info }}</p> <!-- 可以加个返回列表的链接 --> <a href="{% url 'index' %}">返回商品列表</a>
这样操作后,用户点击商品列表里的任意商品,就能跳转到对应的详情页,展示该商品的具体信息了。
内容的提问来源于stack exchange,提问作者user13944733
相关产品推荐
相关产品推荐

