Django 没有反向匹配错误 - 模板渲染
Posted
技术标签:
【中文标题】Django 没有反向匹配错误 - 模板渲染【英文标题】:Django No Reverse Match Error - Template Rendering 【发布时间】:2013-01-04 17:12:16 【问题描述】:我在尝试渲染模板时遇到以下错误:
NoReverseMatch at /things/
Reverse for 'edit_things' with arguments '(u'<function generate at 0x10a970aa',)' and
keyword arguments '' not found.
在我的模板中,以下工作:
<a href="% url add_thing %" class="btn_plus">
但是我在这里得到一个错误:
<td onclick="document.location = '% url edit_thing thing.guid %';" class="edit" id="edit_thing_ forloop.counter "> </td>
我们没有使用: % 从未来 % 加载 url。这是 Django 1.4。
在我的网址中:
url(r'^edit_thing/(?P<thing_id>[\w_-]1,32)/$', 'edit_thing', name='edit_thing'),
视图看起来像:
def edit_thing(request, thing_id):
对出了什么问题有任何想法吗?我不明白为什么 add_things 在模板中可以正常工作,并且一旦到达 edit_thing 就会崩溃。会不会是 edit_thing 需要一个参数?我已经尝试了 *** 上的所有内容,并尝试了各种组合(包括从未来加载 url,等等)。
这是我的模型:
class Thing(models.Model):
guid = models.CharField(max_length=Guid.LENGTH, blank=True, null=True, unique=True, default=Guid.generate)
class Meta:
app_label = 'things'
【问题讨论】:
你试过% url things:edit_thing thing.guid %
吗? (假设您的应用名称实际上是things
)
你能粘贴你的东西模型吗?另外,试试 % url edit_thing thing_id=thing.guid %
好的,所以我尝试了 % url things:edit_thing thing.guid %,这解决了问题。现在我遇到的问题是:u'things' is not a registered namespace
。我的INSTALLED_APPS
中有things
。
什么 django 版本?最好是% load url from future %
和% url 'things:edit_thing' thing.gui %
。
也许您的模型定义中需要 default=Guid.generate() 。我猜你需要函数的结果而不是函数本身
【参考方案1】:
您需要更改模型定义。更改default
:
class Thing(models.Model):
guid = models.CharField(max_length=Guid.LENGTH, blank=True, null=True, unique=True, default=Guid.generate())
class Meta:
app_label = 'things'
你得到了一个函数的字符串表示,因为你传递了函数本身:
'(u'<function generate at 0x10a970aa',)'
换句话说:
>>> unicode(Guid.generate)
u'<function generate at 0x10a970aa'
>>> unicode(Guid.generate()) # This is what you need
u'Result'
应该这样做
【讨论】:
在数据库中,我有:'function generate at 0x10a970aa' 作为 guid,这导致它中断。谢谢!以上是关于Django 没有反向匹配错误 - 模板渲染的主要内容,如果未能解决你的问题,请参考以下文章