将模型字段解析为模板内的字符串

时间:2016-07-04 16:17:11

标签: django django-templates django-views

所以我有这个模板从产品模型集合中获取了大量产品,我希望将对象的名称或对象本身传递给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'],
    })

1 个答案:

答案 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'),

这是做这样事情的标准方式