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

时间:2013-10-23 04:34:23

标签: django

我在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参数传递?

2 个答案:

答案 0 :(得分:1)

您可以尝试将它们作为查询字符串参数而不是在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')
    ...

答案 1 :(得分:0)

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

您可能需要查看part 4Django tutorial