首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoReverseMatch在django

NoReverseMatch在django
EN

Stack Overflow用户
提问于 2009-11-22 18:09:53
回答 2查看 9K关注 0票数 4

调试了一段时间后,我发现了错误,但我不知道如何修复它。

我有一个名为‘object_detail.

  • The’的urlConf,它接收一个caja对象的id作为参数,然后调用泛型{% ver_caja caja.id %}

  • The queryset是正确的:正确地获取所有caja对象。在我调用的模板中的

  • :使用MySQL.

正确地接收到了{% ver_caja caja.id %}

  • The对象caja

问题是caja.id的值为"1L“,而不是"1"

这个1L会产生错误,因为urlconf (ver_caja)等待的是一个整数,而不是字母数字'<int>L‘。

我在django docs站点获得的所有信息都是这样的(作为教程中的一个例子),它没有帮助:

代码语言:javascript
复制
...

>>> p = Poll(question="What's up?", pub_date=datetime.datetime.now())

# Save the object into the database. You have to call save() explicitly.
>>> p.save() 

# Now it has an ID. Note that this might say "1L" instead of "1", depending 
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
>>> p.id

...

那么,我如何才能修复这个以接收caja.id=1而不是caja.id=1L

提前谢谢。

佩德罗

编辑:这里有所有的文件。

模板错误:

在呈现时发现了一个异常:“ver_caja_chica”与参数'(1L,)‘和关键字参数'{}’没有找到。

caja/models.py

代码语言:javascript
复制
class Caja(models.Model):
    slug = models.SlugField(blank=True)
    nombre = models.CharField(max_length=20)
    saldo = models.DecimalField(max_digits=10, decimal_places=2)
    detalle = models.TextField(blank=True, null=True)

    # apertura
    fechahora_apert = models.DateTimeField(default=datetime.datetime.now, auto_now_add=True)
    usuario_apert = models.ForeignKey(Usuario, related_name=u'caja_abierta_por', help_text=u'Usuario que realizó la apertura de la caja.')

    # cierre
    fechahora_cie = models.DateTimeField(blank=True, null=True)
    usuario_cie = models.ForeignKey(Usuario, null=True, blank=True, related_name=u'caja_cerrada_por', help_text=u'Usuario que realizó el cierre de la caja.')

    def __unicode__(self):
        return u'%s,  $%s' % (self.nombre, self.saldo)

    class Meta:
        ordering = ['fechahora_apert']


class CajaChica(Caja):
    dia_caja = models.DateField(default=datetime.date.today, help_text=u'Día al que corresponde esta caja.')
    cerrada = models.BooleanField(default=False, help_text=u'Si la caja está cerrada no se puede editar.')

caja/urls.py

代码语言:javascript
复制
cajas_chicas = {
    'queryset': CajaChica.objects.all(),
}

urlpatterns = patterns('',
    url(r'^$', 'django.views.generic.list_detail.object_list', dict(cajas_chicas, paginate_by=30), name="lista_cajas_chicas"),
    url(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', dict(cajas_chicas, ), name="ver_caja_chica"),
)

cajachica_list.html

代码语言:javascript
复制
...
<table>
{% for obj in object_list %}
<tr class="{% cycle 'row1' 'row2' %}">
    <td>{{ obj.nombre|capfirst }}</td>
    <td>{{ obj.fechahora_apert|timesince }}</td>
    <td>{{ obj.usuario_apert }}</td>
    <td>{{ obj.saldo }}</td>
    <td><a href="{% url ver_caja_chica obj.pk %}">Ver / Editar</a></td>
</tr>
{% endfor %}
</table>
...

Edt-2有错误的urlconf (目的),这些是这个应用程序的urls:

代码语言:javascript
复制
... 
4. ^caja/$ ^$ 
5. ^caja/$ ^(?P<object_id>\d+)/$ 
... 

也许最终的url是django构造错误的。

这些urls位于caja/urls.py中,由urls.py从项目的根目录中包含。

有线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-22 22:14:19

您确实已经将这个URL配置连接到您的主要URL配置上了吗?

在您的项目的urls.py中,确保您有如下内容:

代码语言:javascript
复制
urlpatterns = patterns('',
    #...
    url(r'^cajas/', include('caja.urls')),
)
票数 8
EN

Stack Overflow用户

发布于 2009-11-22 20:30:09

问题根本不是你想的那样。参数显示为'(1L,)',因此元组中的值是一个整数,尽管是一个长的整数,而不是字符串,该字符串将显示为'('1L',)'。(对L的解释显示在您发布的代码的注释中)。

实际上,问题在于您的URL需要一个命名关键字参数,而不是一个未命名的位置参数。这是因为您已经将regex组命名为:(?P<object_id>\d+)。因此,url标记应该是:

代码语言:javascript
复制
{% url ver_caja_chica object_id=obj.pk %}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1779463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档