我开始使用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和以上介绍的语法{从未来%%负载URL}在校正的行为,其中MyView的被看作是一个变量带来。
这样的结果是,如果你没有在你的模板中使用{从未来%%负载网址},则需要更改像{%URL MyView的%}标签{%URL“MyView的”%}。 如果您使用{从未来%%负载URL}可以直接删除的Django 1.5下该行
然后我试图: <a href=“{% url 'auto.views.view_post' post.slug %}”><h3>{{post.title}}</h3></a>
但得到了误差为“反向auto.views.view_post“与参数‘(’”,)”和关键字参数‘{}’未找到。 :(我在做什么错?THX!
我真的很讨厌做这一切垃圾手工,所以我写了一个sed脚本来为我做。 请确保你有一个备份,然后再在你的模板目录中运行以下命令:
find . -type f -print0 | xargs -0 sed -i 's/{% url \([^" >][^ >]*\)/{% url "\1"/g'
它会通过所有的模板文件,并替换此:
{% url something.else foo bar %}
有了这个
{% url "something.else" foo bar %}
要小心,我这个懒一点,它可能在某些构造断裂。 它仍然会更容易在一个差异不是做手工查找错误,虽然。
首先,你是正确的使用单引号的视图名称,即'auto.views.view_post'
。
现在,暂时删除url
标记,并检查{{ post }}
和{{ post.slug }}
给你所期望的值。 该错误消息arguments '('',)'
表明post.slug
就是问题所在。
为了排除git的文件夹,并避免错误的MacOS的加空引号,以-i选项'。 例:
find . -path '*/.git*' -prune -o -type f -print0 | xargs -0 sed -i '' 's/ url \([^" >][^ >]*\)/ url "\1"/g'
但我喜欢这种方法(MacOS的):
grep '{% url' -lrZ . | xargs -0 sed -i '' 's/ url \([^" >][^ >]*\)/ url "\1"/g'
如果您使用的是Mac OS,您需要通过-e
find . -type f -print0 | xargs -0 sed -i -e 's/ url \([^" >][^ >]*\)/ url "\1"/g'
我是从大多数这些食谱,这我能够这样做首先解决的sed的得到一个“非法的字节序列”错误:
LANG=C
然而,这些食谱产生的对我的项目吨的误报,而且我们已经有这样的人单引号,双引号,或不带引号的网址名称的组合。 这是一个烂摊子。 原来,最干净的方法是只搜索模板目录与我在正则表达式模式编辑器(崇高):
\{\%\ url\ [^']
\{\%\ url\ [^"]
(发现不是已经引述的所有实例),并通过他们去视觉。 这竟然是比试图自动化,然后事后收拾残局更快,更清洁。
还可能需要执行正则表达式替换"\{% url "([\w:]+)"
为"\{% url '$1'
以aviod像语法错误<a href="{% url "foo:bar" %}">baz</a>
文章来源: Django release 1.5: 'url' requires a non-empty first argument. The syntax changed in Django 1.5