2009-11-22 4 views
4

잠시 동안 디버깅 한 후에 오류가 무엇인지 발견했지만 해결 방법을 모르겠습니다.NoReverseMatch in django

  • 가 나는 urlConf이 인수로 카하 개체의 ID를 수신 한 다음 일반 object_detail을 부르는 이름 'ver_caja을'오순절있다.
  • queryset이 ​​정확합니다. 모든 caja 개체를 올바르게 가져옵니다. {% ver_caja caja.id %}
  • 개체 caja 올바르게 템플릿에 의해 수신 : 템플릿에서
  • 나는 전화를 가지고있다.
  • 저는 MySQL을 사용하고 있습니다.

문제는 caja.id대신에 "1"의 「1L」을 갖는다는 것이다.

1L은 urlconf (ver_caja)가 영숫자가 아닌 정수를 기다리기 때문에 오류가 발생합니다 (<int>L).

내가 장고 문서에있어 모든 정보는 사이트 (튜토리얼에서 예를 들어)이 있으며, 도움이되지 않습니다

그래서
... 

>>> 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? 사전에

감사합니다.

페드로

편집 :는 여기에서 모든 파일이 있습니다.

템플릿 오류 :

Caught an exception while rendering: Reverse for 'ver_caja_chica' with arguments '(1L,)' and keyword arguments '{}' not found.

카하/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.') 

카하/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> 
... 
아마 최종 URL이 장고에 의해 잘못 구성되어있다

... 
4. ^caja/$ ^$ 
5. ^caja/$ ^(?P<object_id>\d+)/$ 
... 

:(목적에) 잘못된 urlconf와

EDIT-2 ,이는이 응용 프로그램의 URL입니다.

이 URL은 caja/urls.py 안에 있으며 프로젝트의 루트 디렉토리에있는 urls.py에 포함되어 있습니다.

실마리가 있습니까?

+0

이 질문에 urls.py''에서 실제 행을 추가 : 프로젝트의 urls.py 보장에

당신이 뭔가를 가지고있다. '1L'은 파이썬의 긴 정수를 출력하는 방법 일뿐입니다. 문제가 될 것이라고는 생각하지 않습니다. >>> A = 1L >>> 1L >>> STR은 (a) '1' >>> –

+0

I 디버그 모든 코드를 말했다. : P 오류 텍스트에서 오류가 매개 변수 ('1L')에 있음이 확실합니다. 그게 문제가 아니라면, 나는 모르겠다. ... – pmourelle

+0

쿼리 세트에 대해 얻은 오브젝트를 살펴 보자. 모두 긴 int인가? 이걸 DB에 어떻게 저장하나요? – googletorp

답변

8

실제로이 URL 구성을 기본 URL 구성에 연결 했습니까? - 나는 문제가 될 것입니다 곳이 생각

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

남자,이 오류는 쉽게 초보와 장고의 역사에서 가장 바보 같은 오류가 될 수 있습니다. 이 문제를 해결하기 위해 며칠을 보냈다. ## $ @ !!! 발행물. 이 모든 것 때문에 f ***** ing '$'!!!!! 루트 디렉토리에있는 내 urlconf는 (r '^ cajas/$', ('ceom.cajas.urls') 포함), 모델 'cajas'를 만들기 전에 남은 '$' '. 나는 바보처럼 느껴진다. 감사합니다. . – pmourelle

+3

+1 장고를 몇 년 동안 사용하고 있으며 내 의견을 앱으로 분리하기 전에 '$'를 남겨 두었습니다. 다음 번에 NoReverseMatch를 누르면 처음으로 트리플 체크를해야합니다. –

2

문제는 전혀 생각하지 않습니다. 인수는 '(1L,)'으로 표시되므로 튜플의 값은 긴 문자열이긴하지만 정수이며 '('1L',)'으로 표시된 문자열이 아닙니다.L에 대한 설명은 귀하가 게시 한 코드의 주석에 표시됩니다.

실제로 문제는 URL에 명명되지 않은 위치 매개 변수가 아닌 명명 된 키워드 인수가 필요하다는 것입니다. 정규 표현식 그룹의 이름을 (?P<object_id>\d+)으로 지정했기 때문입니다. 따라서 URL 태그는 다음과 같아야합니다.

{% url ver_caja_chica object_id=obj.pk %} 
+0

Acutally, 그건 중요하지 않습니다. 명명 된 정규식 그룹에 대해 위치 인수를 계속 사용할 수 있습니다. – SmileyChris

+0

@ SmileyChris - 인수 순서가 URLConf가 기대하는 것과 일치하지 않는 경우 어떻게해야합니까? 나는 그 일을 할 수 없었습니다. 명명 된 인수가 필요한 곳에 위치 인수 전달. 그것은 가장 안전하고 신뢰할 수있는 일입니다. – jcdyer

+0

@Daniel Roseman - 재밌 네요. 그게 문제가 아니에요. "렌더링 중에 예외가 발생했습니다 : 'ver_caja_chica'의 인수가 '()'이고 키워드 인수가 '' ''object_id ': 1L}'이 (가) 없습니다."라는 오류 메시지가 표시됩니다. : S 미스터리는 해결되지 않은 채로 있습니다. ... 4.^카하/$^$ 5^카하/$^(P \ D +?)/$ : (목적에) 잘못된 urlconf으로 – pmourelle