如何在django中传递变量而不是作为url参数

如何在django中传递变量而不是作为url参数,django,Django,我在url.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'), ) urlpatterns=patterns(“”, url(r'^add'到购物车/(?P {%endfor%}

我在url.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'),
    )
urlpatterns=patterns(“”,
url(r'^add'到购物车/(?P

{%endfor%}
最终会得到这样一个url

“127.0.0.1/购物车/添加到购物车/产品/太阳镜/2/”


这是我想避免的。有没有其他方法可以传递这些变量,但不作为url参数传递?

创建一个表单,在其中使用
submit
类型的按钮。对于每个按钮,为其指定一个可以从请求中检索的值。提交表单时,将该方法设置为
发布
而不是获取


您可能需要查看。

您可以尝试将它们作为查询字符串参数传递,而不是在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 %}

那么,您必须将它们从
url.py
中删除,并将它们作为视图中的POST参数(request.POST)。这也意味着您无法使用
url
模板功能。但为什么不在url中使用它们呢?因为此视图显示购物车中的所有购物车项目,但url有点不同。这对用户来说有点混乱。您可以让视图在广告发布后直接返回HttpResponseResponseDirect到主购物车页面这还有一个好处,即如果用户刷新页面,他将不会再次添加该项目(GET参数也是如此,如果使用POST参数,浏览器会发出恼人的警告)。
{% 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')
    ...