Python 在应用程序之间使用Django url模板标记
我在Django 1.8中使用了两个应用程序的名称空间URL。见下面的简约结构: 购物车Python 在应用程序之间使用Django url模板标记,python,django,django-templates,Python,Django,Django Templates,我在Django 1.8中使用了两个应用程序的名称空间URL。见下面的简约结构: 购物车 -模板 --购物车 ---购物车模板.html -url.py -views.py 购物 -设置.py -url.py 产品 -模板 --购物车 ---购物车模板.html -url.py -views.py 因此,我为“主”应用程序设置了路线: #Shop/urls.py urlpatterns = patterns( '', url(r'^cart/', include('cart.ur
-模板
--购物车
---购物车模板.html
-url.py
-views.py
购物
-设置.py
-url.py
产品
-模板
--购物车
---购物车模板.html
-url.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">
它似乎试图使用应该调用的视图作为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>
谢谢你的努力。我发现了错误。在购物车的索引视图中,我使用以下行:
return redirect(cart.views.index)
如果购物车被修改(文章被删除或数量增加等),我使用它重定向用户。重定向函数在内部使用reverse()函数,以便解析与该视图匹配的URL。见:
对于命名视图,重定向函数不能使用reverse()函数,因此它不能将cart.views.index解析为输入,只重定向到它而不解析
我通过反转命名路由以获取url并重定向用户来修复它,如下所示:
return redirect(reverse('cart:index'))
名称空间的URL应该工作,无论它们在哪个应用程序中。你能试着创建一个指向索引页的简单链接(相对于表单)来检查你的问题是否在其他地方吗?是的,我刚刚尝试了一个简单的链接:它就像一个符咒。添加这一行时会出现问题:input type=“hidden”name=“id”value=“{{article.id}}”>我需要知道将什么放入购物车。更新了问题HM,请尝试在
{%url'购物车:索引“%}
周围放置”
。这意味着:
没有运气,完全相同的行为。另一个可能的问题是购物车/url.py
中有一个列表,而不是模式。因此,请尝试将以下内容放入购物车/url.py
:urlpatterns=patterns(“”,url(r'^$',views.index,name='index'))
MultiValueDictKeyError at /cart/
"'id'"
return redirect(cart.views.index)
return redirect(reverse('cart:index'))