django的NoReverseMatch

django的NoReverseMatch,django,url,integer,reverse,Django,Url,Integer,Reverse,经过一段时间的调试,我发现了错误,但我不知道如何修复它 我有一个名为“ver\u caja”的urlConf,它接收caja对象的id作为参数,然后调用通用的object\u detail queryset是正确的:正确获取所有caja对象 在模板中,我有一个调用: {%ver\u caja caja.id%} 模板正确接收到对象caja 我正在使用MySQL 问题是caja.id的值是“1L”而不是“1” 此1L引发错误,因为urlconf(ver_-caja)等待的是一个整数,而不是字母

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

  • 我有一个名为“
    ver\u caja
    ”的urlConf,它接收caja对象的id作为参数,然后调用通用的
    object\u detail
  • queryset是正确的:正确获取所有caja对象
  • 在模板中,我有一个调用:
    {%ver\u caja caja.id%}
  • 模板正确接收到对象
    caja
  • 我正在使用MySQL
问题是
caja.id
的值是“1L”而不是“1”

1L
引发错误,因为urlconf(
ver_-caja
)等待的是一个整数,而不是字母数字“
L

我在django docs网站上得到的所有信息都是这样的(作为教程中的一个示例),但它没有任何帮助:

...

>>> 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

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/url.py

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"),
)
cajas_chicas={
'queryset':CajaChica.objects.all(),
}
urlpatterns=模式(“”,
url(r'^$','django.views.generic.list\u detail.object\u list',dict(cajas\u chicas,paginate\u by=30),name=“lista\u cajas\u chicas”),
url(r'^(?P\d+/$),'django.views.generic.list_detail.object_detail',dict(cajas_chicas,),name=“ver_caja_chica”),
)
cajachica_list.html

...
<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>
...
。。。
{对象_列表%中的对象为%j}
{{obj.nombre | capfirst}
{obj.fechahora|apert|timesince}
{{obj.usuario_apert}
{{obj.saldo}
{%endfor%}
...
编辑-2 使用错误的urlconf(故意),此应用程序的URL如下:

... 
4. ^caja/$ ^$ 
5. ^caja/$ ^(?P<object_id>\d+)/$ 
... 
。。。
4. ^caja/$^$
5. ^caja/$^(?P\d+)/$
... 
也许django构造的最终url是错误的

这些URL位于caja/urls.py中,并包含在项目根目录的urls.py中


有什么线索吗?

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

事实上,问题是您的URL需要一个命名的关键字参数,而不是一个未命名的位置参数。这是因为您已将正则表达式组命名为:
(?P\d+
)。因此,url标记应该是:

{% url ver_caja_chica object_id=obj.pk %}

是否确实已将此URL配置连接到主URL配置

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

urlpatterns = patterns('',
    #...
    url(r'^cajas/', include('caja.urls')),
)

url.py
中的实际行添加到问题中-我认为这就是问题所在
1L
只是python打印长整数的方法——我认为这不会是问题所在a=1L>>>a 1L>>>str(a)'1'>>>我添加了所有要调试的代码:P在错误文本中似乎很清楚,错误在参数('1L')中。如果这不是问题,那么我不知道…试着看看你为queryset得到的对象。都有长整型吗?如何将其存储在数据库中?实际上,这并不重要。您仍然可以为命名的正则表达式组使用位置参数。@SmileyChris如果参数的顺序与URLConf所期望的不一致怎么办?我从来没能做到这一点。在需要命名参数的位置传递位置参数。“这是最安全、最可靠的事情。”丹尼尔·罗斯曼——斯迈利说得对,这不是问题所在。我做了您建议的更改,错误仍然存在:“在呈现时捕获了一个异常:使用参数“()”和关键字参数“{'object_id':1L}”反转为'ver_caja_chica'”:S未找到该错误。使用错误的urlconf(故意),这些是此应用程序的URL:。。。4. ^caja/$^$5^caja/$^(?P\d+)/$。。。也许django构造的最终url是错误的。这些URL位于caja/urls.py中,并包含在项目根目录的urls.py中。一些线索?问题已解决(url includer在模式末尾有一个“$”)。谢谢丹尼尔对“1L”的解释,我不知道。RegardsMan,这个错误很容易成为django历史上的新手和最愚蠢的错误。花了几天时间试图修复这个##$@!!!问题所有这一切都是因为一个f*********ing'$'!!!!!我在根目录中的urlconf是:(r'^cajas/$,include('ceom.cajas.url')),我从来没有意识到在我创建模型“cajas”之前留下的“$”。我觉得自己像个白痴。谢谢。+1别担心,我已经使用Django很多年了,在我将视图分离成应用程序之前,我就把“$”放在那里了。下次我打NoReverseMatch时,第一次我会三次检查它是否匹配。