【发布时间】:2009-11-22 18:09:53
【问题描述】:
调试了一会发现是什么错误,但是不知道怎么解决。
- 我有一个名为“
ver_caja”的 urlConf,它接收 caja 对象的 id 作为参数,然后调用通用object_detail。 - 查询集正确:正确获取所有 caja 对象。
- 在模板中我有调用:
{% ver_caja caja.id %} - 对象
caja被模板正确接收。 - 我正在使用 MySQL。
问题是caja.id 的值是“1L”而不是“1”。
此1L 引发错误,因为 urlconf (ver_caja) 等待整数而不是字母数字“<int>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/urls.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"),
)
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>
...
EDIT-2 使用错误的 urlconf(故意),这些是此应用程序的 url:
...
4. ^caja/$ ^$
5. ^caja/$ ^(?P<object_id>\d+)/$
...
可能最终的 url 是 django 构造的错误。
这些 url 位于 caja/urls.py 中,并包含在项目根目录中的 urls.py 中。
有什么线索吗?
【问题讨论】:
-
将
urls.py中的实际行添加到问题中 - 我认为这就是问题所在。1L只是 python 打印长整数的方式——我认为这不是问题。 >>> a = 1L >>> a 1L >>> str(a) '1' >>> -
我添加了所有的代码来调试。 :P 错误文本中似乎很清楚错误在参数('1L')中。如果这不是问题,那我不知道......
-
尝试查看您为查询集获得的对象。都有一个长整数吗?您如何将其存储在数据库中?
标签: django url integer reverse