Django没有反向匹配错误 - 模板渲染

时间:2013-01-21 15:43:44

标签: django django-templates

尝试渲染模板时出现以下错误:

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 }}">&nbsp;&nbsp;&nbsp;</td>

我们没有使用: {%load url from future%}。这是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需要参数吗?我已经尝试了Stackoverflow上的所有内容,并尝试了各种组合(包括来自未来的加载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'

1 个答案:

答案 0 :(得分:3)

您需要更改模型定义。更改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'

应该这样做