小编典典

Django 1.5版:“ url”需要一个非空的第一个参数。语法在Django 1.5中已更改

django

我开始使用Django 1.5版,而我的旧代码出现了问题:

<a href="{% url auto.views.viewpost post.slug %}"><h3>{{post.title}}</h3></a>

错误:“ url”需要一个非空的第一个参数。语法在Django 1.5中已更改,请参阅文档。文件:

值得注意的一项不推荐使用的功能是转向“新型” URL标签。在Django 1.3之前,诸如{%url myview%}之类的语法被错误解释(Django认为“ myview”是视图的文字名称,而不是名为myview的模板变量)。Django 1.3及更高版本引入了{未来的%加载网址}语法,以引入更正的行为,其中myview被视为变量。

这样的结果是,如果你在模板中未使用{%将来的%}加载URL,则需要将{%url myview%}之类的标签更改为{%url“ myview”%}。如果你使用的是{未来的%加载网址},则可以在Django 1.5下简单地删除该行

然后,我尝试了: <a href=“{% url ‘auto.views.view_post’ post.slug %}”><h3>{{post.title}}</h3></a> 但是对于’auto.views.view_post’却出现了错误反向,其中未找到参数’(’,)’和关键字参数’{}’。:(我做错了什么?


阅读 345

收藏
2020-03-31

共1个答案

小编典典

我真的很讨厌用手做所有这些垃圾,所以我写了一个sed脚本来替我做。确保先备份,然后在模板目录中运行此备份:

find . -type f -print0 | xargs -0 sed -i 's/{% url \([^" >][^ >]*\)/{% url "\1"/g'

它会遍历所有模板文件并替换为:

{% url something.else foo bar %}

有了这个

{% url "something.else" foo bar %}

请注意,我对此有点懒,它可能会在某些结构上中断。不过,在差异中查找错误仍然比手工操作要容易得多。

2020-03-31