URL 命名在模板中不起作用

Posted

技术标签:

【中文标题】URL 命名在模板中不起作用【英文标题】:URL naming not working in template 【发布时间】:2012-07-18 19:44:10 【问题描述】:

当我转到 /blog/tag/1 查看第一个现有标记项时,它呈现对 tag.html 的响应,我得到一个异常:“Caught NoReverseMatch while rendering: Reverse for ''add-node'' with未找到参数“()”和关键字参数“”。”

我的 URLs.py 中有类似的内容:

url(r'^blog/add_node/$', 'Alpha.Gamma.views.add_node', name='add-node'),

Views.py:

def add_node(request):
    tag = Tag.objects.all()
    action = reverse("add-node-proc")
    title = "Submit Article"

    return render_to_response("blog/add_node.html", add_csrf(request, action=action, title=title, tags=tag, button="Submit Article"))

tag.html的模板有:

<a id="new_node" class="buttont" href="% url 'add-node' %">Add new blog post</a>
<br />
<br />

我得到的错误:

渲染时 NoReverseMatch:未找到带有参数“()”和关键字参数“”的“添加节点”的反向。

它突出显示了我在上面为 tag.html 放置的行。

add_node.html 是一个简单的表单模板。我做错了什么,文档说我做的一切都是正确的。

如果我将模板上的“url 'add-node'”更改为“url Alpha.Gamma.views.add_node”,一切都会突然运行---为什么???我不明白这个 django url 调度程序。

是的,我已经多次重启了 apache。

【问题讨论】:

尝试在模板中的 add-node 周围加上引号,看看是否有效。 它通过了。但是文档误导了我并告诉我使用 % url 'arch-summary' 1945 % % url 'full-archive' 2007 % docs.djangoproject.com/en/dev/topics/http/urls 我鼓励你发送错误报告:) 【参考方案1】:

如果您使用的是 url 标签,请注意您不需要在 url 名称周围加上引号:

% url add-node %

不是

% url 'add-node' %

【讨论】:

或者,如果您使用的是 Django 1.3 或 Django 1.4,另一种方法是保留引号,并将 % load url from future % 添加到您的模板中。请参阅url tag docs 中有关前向兼容性的部分。 这是我想到的,但我对自己说,“不可能,因为文档中有:” % url 'arch-summary' 1945 % % url 'full-archive' 2007 % 为例。如果正确的方法是不加引号,为什么还要加引号??? Django 把文档弄乱了吗?

以上是关于URL 命名在模板中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

重命名文件选项在 dropzone.js 中不起作用

注销在 Django 中不起作用

“prefs” URL 方案在 iOS 10(Beta 1 和 2)中不起作用

为啥方法重命名在 PHP 特征中不起作用?

为啥模板参数推导在 C++ 中不起作用?

为啥使用命名空间在我的 C++ 项目中不起作用?