用参数找到Django反向url,但是没有关键字

时间:2014-06-03 12:34:17

标签: python django

这是关于错误的另一个问题:

Reverse for 'dataPoints' with arguments '()' and keyword arguments '{u'loadID': 5}' not found. 1 pattern(s) tried: [u'loads/dataPoints/']

我已经筛选了大量相关帖子,但似乎无法弄清楚发生了什么。问题是这样的:在使用url命名空间的应用程序中,当我尝试将关键字参数传递给url时,视图模板失败并出现上述错误,但是如果我使用位置参数则会起作用。

这就是给我上述错误的原因:

顶级urls.py:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    ...
    url(r'^loads/', include(sig.views.data_loads.urls_data_loads, namespace="loads")),
    url(r'^authentication/', include(sig.views.authentication.urls_authentication, namespace="authentication")),
    url(r'^account/', include(sig.views.account.urls_account, namespace="account")),
)

urls.py for“loads”:

urlpatterns = patterns('',
    url(r'^dataPoints', views.DataPoints.as_view(), name='dataPoints')
)

template.html:

<a href="{% url 'loads:dataPoints' loadID=5 %}">points</a>

然后它说它无法找到相反的结果。基于我发现的一些相关主题,我尝试过:
- 尝试没有引号的链接,即{%url loads:dataPoints ...%}(它失败)
- 尝试了不同的正则表达式模式,例如url(r'^ dataPoints(。)*)(仍然无法找到反向)

我可以通过使用位置参数轻松地解决这个问题但是我真的不知道我无法解决这个问题。我之前在应用程序中使用了这样的关键字args,我想知道是否有些东西是因为我使用的是url名称空间?无论是那种,或者更可能的是,我正在做一些完全愚蠢的事情。

编辑:为DataPoints视图添加代码:

class DataPoints(TemplateView):
    template_name = "data_loads/templates/dataPoints.html"
    def get(self, request):
        loadID = request.GET["loadID"]
        return self.render_to_response({})

3 个答案:

答案 0 :(得分:1)

urlpatterns = patterns('',
    url(r'^dataPoints', views.DataPoints.as_view(), name='dataPoints')
)

您修改后的网址不会采用任何参数,而是采用loadID之前的参数。

所以你看到的行为是正确的。

要使用kwargs,请保持您的网址相同并使用您正在执行的模板

<a href="{% url 'loads:dataPoints' loadID=5 %}">points</a>

答案 1 :(得分:1)

我正在考虑Rohans的回答。

模式r'^dataPoints'将匹配任何开始的&#39; dataPoints&#39;,包括dataPoints?load=5,但是&#39;加载&#39;将被添加到request.GET(因此request.GET['load']是&#39; 5&#39;)。这就是你从未见过像r'^dataPoints?loadID=[0-9]+$那样的人,因为它不是url模式的工作方式。 Rohans这里的原始答案是正确的,您只需要在urls.py中恢复原始模式以便加载&#39;。如果错误消失,你应该尝试他所建议的并接受他的答案,我相信它会。

答案 2 :(得分:1)

好的 - 我知道这对我来说是愚蠢的。我假设&#34;关键字参数&#34;在url调度的上下文中意味着GET参数,而不是路由到get()方法的关键字args。这也是我对提到方法签名的评论感到困惑的原因。啊。相当愚蠢,但希望这将有助于其他犯同样错误的人。无论如何,最后的答案是我的模板文件中的行应该是:

<a href="{% url 'loads:dataPoints' %}?loadID=5">points</a>

最终导致我点击这个帖子的帖子是this one。谢谢,大家,谢谢你。