Django开发:如何基于product_id和user_id实现商品页面访问?
解决方法
1. 调整URL配置
你当前的URL只接收product_id,要支持传递user_id,得修改urls.py的路径配置,分两种场景处理:
场景1:user_id为必传参数
直接在路径中添加user_id的捕获规则:
# urls.py from django.urls import path from . import views urlpatterns = [ # 替换原有的product路径,或新增该路径 path('product/<int:product_id>/<int:user_id>/', views.product, name='product'), # 其他URL规则... ]
场景2:user_id为可选参数(允许不传)
需要用正则路径re_path实现可选参数逻辑:
# urls.py from django.urls import path, re_path from . import views urlpatterns = [ re_path(r'^product/(?P<product_id>\d+)(/(?P<user_id>\d+))?$', views.product, name='product'), # 其他URL规则... ]
2. 完善视图函数逻辑
你的视图目前仅渲染模板,未根据传入ID获取对应数据,补充业务逻辑如下:
# views.py from django.shortcuts import get_object_or_404, render from django.contrib.auth.decorators import login_required from .models import Product # 替换为你实际的商品模型 from django.contrib.auth.models import User @login_required # 括号可省略,效果一致 def product(request, product_id, user_id=None): # 根据product_id获取商品,不存在则返回404页面 product = get_object_or_404(Product, id=product_id) # 若传入user_id,获取对应用户对象 target_user = None if user_id: target_user = get_object_or_404(User, id=user_id) # 将商品、用户数据传递给模板 return render(request, 'users/product.html', { 'product': product, 'target_user': target_user })
3. 在模板中生成跳转链接
在商品列表模板里,用Django的{% url %}标签生成带参数的跳转链接:
必传user_id场景
<!-- 假设列表中的商品对象为product,当前登录用户为request.user --> <a href="{% url 'product' product.id request.user.id %}">查看商品:{{ product.name }}</a>
可选user_id场景
<!-- 不传user_id的情况 --> <a href="{% url 'product' product.id %}">查看商品:{{ product.name }}</a> <!-- 传递user_id的情况 --> <a href="{% url 'product' product.id request.user.id %}">查看商品(关联当前用户)</a>
4. 在商品页面模板中使用数据
在users/product.html中,直接调用传入的变量展示内容:
<h1>{{ product.name }}</h1> <p>价格:{{ product.price }}</p> {% if target_user %} <p>关联用户:{{ target_user.username }}</p> {% endif %}
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

