在应用程序之间使用Django url模板标记

时间:2015-08-29 08:04:09

标签: python django django-templates

我在Django 1.8中使用带有两个应用程序的命名空间URL。请参见下面的简约结构:


- 模板
- -cart
- - -cart-template.html
- urls.py
- views.py
商店
- settings.py
- urls.py
产品
- 模板
- -cart
- - -cart-template.html
- urls.py
- views.py

所以我设置了我的路线,为'主'应用程序:

#Shop/urls.py
urlpatterns = patterns(
    '',
    url(r'^cart/', include('cart.urls', namespace='cart')),
)

和购物车应用

#Cart/urls.py
urlpatterns = [
url(r'^$', views.index, name='index'),
]

此模板标记完美无缺:

# Cart/templates/cart/cart-template.html
<form action= {% url 'cart:index' %} method="post">

然而,当我在产品的页面上(由产品应用程序处理)并单击一个按钮时,它应该以完全相同的方式重定向我,它给出了404:

# Product/templates/product/product-template.html
<form action= {% url 'cart:index' %} method="post">

换句话说,我不能在另一个应用程序的模板中使用Cart应用程序的命名空间url,Product.How我可以做到这一点/我做错了什么?这是我的输出:

Page not found (404)
Request Method:     GET
Request URL:    http://0.0.0.0:8000/cart/cart.views.index

似乎尝试使用应该调用的视图作为URL。

编辑:当我在隐藏字段中添加名称属性时,似乎发生了错误:

<!-- Product/templates/product/product-template.html -->

<form action= {% url 'cart:index' %} method="post">  
            {% csrf_token %}  
            <!-- this link works -->  
            <a href={% url 'cart:index'%}> Click</a>  
            <!-- Submit button goes to correct URL when name attribute of hidden field below is commented out, but I need it to know what to put in cart -->
            <input type="hidden" name="id" value="{{ article.id }}"> 
            <input type="submit" value="Bestellen" class="btn btn-default"/>
        </form>

当隐藏输入字段的name属性被删除时,我收到以下错误:

MultiValueDictKeyError at /cart/  

"'id'"

1 个答案:

答案 0 :(得分:0)

感谢您的努力。我发现了错误。在购物车的索引视图中,我习惯于以下行:

return redirect(cart.views.index)

如果购物车被修改(文章被删除或添加数量等),我曾经用来重定向用户。重定向功能在内部使用reverse()函数,因此匹配该视图的URL将被解析。请参阅:https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#reverse

对于命名视图,重定向函数不能使用reverse()函数,因此它无法将cart.views.index解析为输入,只是重定向到它而不解析。

我通过反转命名路由来修复它以获取URL并重定向用户,如下所示:

return redirect(reverse('cart:index'))