【问题标题】:Using the Django url template tag between apps在应用程序之间使用 Django url 模板标签
【发布时间】:2015-11-23 21:03:03
【问题描述】:

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

购物车
- 模板
- -购物车
- - -cart-template.html
- urls.py
- views.py
商店
- 设置.py
- urls.py
产品
- 模板
- -购物车
- - -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">

换句话说,我不能在另一个应用程序 Product 的模板中使用购物车应用程序的命名空间 url。我怎样才能使这成为可能/我做错了什么?这是我的输出:

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>

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

MultiValueDictKeyError at /cart/  

"'id'"

【问题讨论】:

  • 命名空间网址应该可以工作,无论它们在哪个应用程序中。您可以尝试创建一个指向索引页面(相对于表单)的简单链接,以检查您的问题是否在其他地方?
  • 是的,我刚刚尝试了一个简单的链接: Link ,它就像一个魅力。添加此行时会出现问题: input type="hidden" name="id" value="{{ article.id }}"> 我需要知道要放入购物车的内容。更新问题
  • 嗯,试着把"" 放在{% url 'cart:index' %} 周围。所以这意味着:&lt;form action="{% url 'cart:index' %}" method="post"&gt;
  • 不走运,完全相同的行为。
  • 另一个可能的问题是cart/urls.py,你有一个列表而不是patterns。所以尝试将以下内容放入cart/urls.pyurlpatterns = patterns('', url(r'^$', views.index, name='index'))

标签: python django django-templates


【解决方案1】:

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

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'))

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2013-01-21
    • 2022-11-25
    • 1970-01-01
    • 2010-11-03
    • 2014-03-20
    • 2011-05-09
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多