我开始使用Django 1.5版,但我的旧代码遇到了问题:
<a href="{% url auto.views.viewpost post.slug %}"><h3>{{post.title}}</h3></a>
错误:'url'需要非空的第一个参数 . Django 1.5中的语法发生了变化,请参阅文档 . 文档:
一个值得注意的弃用功能是转向“新式”网址标签 . 在Django 1.3之前,{%url myview%}之类的语法被错误地解释(Django将“myview”视为视图的文字名称,而不是名为myview的模板变量) . Django 1.3及以上版本引入了{%load url from future%}语法,以引入已将myview视为变量的更正行为 . 这样做的结果是,如果您未在模板中使用{%load url from future%},则需要将{%url myview%}等标记更改为{%url“myview”%} . 如果你使用来自未来%的{%load url},你可以在Django 1.5下删除该行
然后我尝试了: <a href=“{% url ‘auto.views.view_post’ post.slug %}”><h3>{{post.title}}</h3></a>
但是错误反向'auto.views.view_post'带参数'('',)'和关键字参数'{}'找不到 . :(我做错了什么?Thx!
6 回答
我真的很讨厌手工制作所有这些垃圾,所以我写了一个sed脚本来为我做 . 确保先备份,然后在模板目录中运行:
它将遍历所有模板文件并替换为:
有了这个
小心,我对此有点懒,它可能会破坏一些结构 . 不过,现在仍然可以更容易地在差异中查找错误而不是手动执行错误 .
首先,对于视图名称使用单引号是正确的,即
'auto.views.view_post'
.现在,暂时删除
url
标记,并检查{{ post }}
和{{ post.slug }}
是否为您提供了所需的值 . 错误消息arguments '('',)'
表明post.slug
是问题所在 .要排除.git文件夹并避免错误,MacOS会将空引号添加到选项-i'' . 例:
但我喜欢这种方法(MacOS):
如果您使用的是Mac OS,则需要传递-e
我从sed中得到了一个“ILLEGAL BYTE SEQUENCE”错误,其中包含大部分这些食谱,我可以通过以下方式解决这个问题:
然而,这些食谱在我的项目中产生了大量误报,我们已经混合了单引号,双引号或不引用的url名称 . 这是一团糟 . 事实证明,最简洁的方法是在regex模式下使用我的编辑器(Sublime)搜索模板目录:
(查找尚未引用的所有实例)并直观地浏览它们 . 事实证明,比试图自动化然后清理混乱更快更清洁 .
您可能还需要为
"\{% url '$1'
执行regexp-replace"\{% url "([\w:]+)"
以避免语法错误,例如<a href="{% url "foo:bar" %}">baz</a>