我在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参数传递?
答案 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 4的Django tutorial。