1

我在 urls.py 中有这个:

urlpatterns = patterns('',
    url(r'^add_to_cart/(?P<app_label>\w+)/(?P<model_name>\w+)/(?P<obj_id>\d+)/$', AddToCart.as_view(), name='add-to-cart'),
    )

我正在使用它在模板中调用 AddToCart 视图:

{% for eg in eyeglasses %}
<p>{{eg}} <a href="{% url 'add-to-cart' eg|app_label eg|class_name  eg.pk %}" >Buy</a> </p>  
{% endfor %}

这最终有一个这样的网址

“127.0.0.1/cart/add_to_cart/product/Sunglass/2/”

我想避免。是否有任何不同的方式来传递这些变量但不将它们作为 url 参数传递?

4

2 回答 2

3

您可以尝试将它们作为查询字符串参数而不是在 url 中传递,因此您可以将 url 构建为

http://127.0.0.1/cart/add_to_cart?app_label=product&product=Sunglass&id=2

在模板中将其构建为

{% for eg in eyeglasses %}
<p>{{eg}} <a href="{% url 'add-to-cart' %}?app_label={{eg.app_label}}&product={{eg.class_name}}&id={{eg.pk}} %}" >Buy</a> </p>  
{% endfor %}

鉴于你可以得到它

def add_cart_view(request):
    ....
    product_name = request.GET.get('product')
    ...
于 2013-10-23T04:57:27.237 回答
0

与其拥有链接列表,不如创建一个使用 类型按钮的表单submit。对于每个按钮,给它一个可以从请求中检索的值。当您提交表单时,将方法设置为post而不是get.

您可能想看看Django 教程的第 4部分。

于 2013-10-23T04:44:05.953 回答