所以我有这个模板从产品模型集合中获取了大量产品,我希望将对象的名称或对象本身传递给views.py中的视图
但是当我尝试使用这样的链接发送产品模型本身时,似乎总是收到错误消息:
<a href="{% url 'show_cart' product=product %}">Add to cart</a>
我收到这样的错误:
Reverse for 'show_cart' with arguments '()' and keyword arguments
'{'product': <Product: Gul Juice>}' not found. 1 pattern(s) tried:
['handlekurv/(?P<product>[-\\w]+)/$']
所以我尝试将其格式化为一个字符串:
<a href="{% url 'show_cart' product=product.name|stringformat:"s" %}">Add to Cart</a>
但后来我得到了这个错误:
Reverse for 'show_cart' with arguments '()' and keyword arguments
'{'product': 'Gul Juice'}' not found. 1 pattern(s) tried:
['handlekurv/(?P<product>[-\\w]+)/$']
这是网址:
url(r'^handlekurv/(?P<product>[-\w]+)/$', views.show_cart, name='show_cart'),
视图的第一部分:
def show_cart(request, product):
if 'cart' in request.session:
request.session['cart'].append(product.id)
else:
request.session['cart'] = [product]
return render(request, 'shopping/show_cart.html', {
'cart': request.session['cart'],
})
答案 0 :(得分:0)
您无法传递链接中的对象。您可以更改__unicode__
/ __str__
函数以返回所需的字符串,但更改魔术方法只是为了在一个模板中构建一些URL是过度的。您可以使用产品ID,例如:
def show_cart(request, product_id):
product = Product.objects.get(pk=product_id)
# ...
并在模板中:
<a href="{% url 'show_cart' product.id %}">Add to cart</a>
urlconf:
url(r'^handlekurv/(?P<product_id>\d+)/$', views.show_cart, name='show_cart'),
这是做这样事情的标准方式