无法使用{%url%}模板标记正确生成带有捕获参数的URL

时间:2014-08-17 17:56:19

标签: python django django-templates django-urls

我遇到了通过模板标记提供捕获的网址参数的问题。我有一个带有捕获参数的URL调度,该调度传递给另一个没有任何捕获参数的include()的URL调度:

nodemanager.urls: url(r'^(?P<node_id>\d+)/rank/', include('ranking.urls')),

ranking.urls: url(r'^setup$', views.setup, name='setup'),

我在模板中使用{% url 'setup' node_id=node.id %}会产生错误:

  

/ stage1 / node / 5 / rank / setup

中的TypeError      

setup()得到了一个意外的关键字参数&#39; node_id&#39;

如果我取出关键字参数并使用:{% url 'setup' %},则登录页面无法加载,我收到(可预测的)错误:

  

/ stage1 /

的NoReverseMatch      

反转&#39;设置&#39;参数&#39;()&#39;和关键字参数&#39; {}&#39;未找到。 1个模式&gt;尝试:[&#39; stage1 / node /(?P \ d +)/ rank / setup $&#39;]

我知道我需要提供node_id的参数才能正确反转网址。但是,名为url&#34; setup&#34;在我的排名应用程序中没有任何参数,但包含它的URL(在nodemanager应用程序中)确实如此。

如何使用指向node_id的模板标记正确传递stage1/node/5/rank/setup关键字参数,即{% url 'setup' ... %}形式的内容。我可以这样做吗?

如果我需要发布更多上下文代码,请告诉我们;我试图包括(我认为)相关的部分。

1 个答案:

答案 0 :(得分:0)

原始错误不是由于URL反转,而是在实际调用视图时出现。这可能是因为您尚未声明它采用node_id参数。它应该是这样的:

def setup(request, node_id):
    ...

修复后,原始网址标记语法应该有效。