Django NoReverseMatch 5

Mar*_*ele 1 django reverse

我收到了这个错误,我不知道为什么:

  Reverse for 'buildings.views.generate' with arguments '()' and keyword arguments '{'new_id': -1}' not found.
Run Code Online (Sandbox Code Playgroud)

这是我的urls.py(的一部分):

  url(r'^buildings/generate/new_building(?P<new_id>\d+)', 'buildings.views.generate'),
Run Code Online (Sandbox Code Playgroud)

风景:

  @login_required
  def generate(request, new_id):
          session = {}

          if new_id == -1:
                  other_buildings = Building.objects.filter(utente=request.user, pronto=False)

                  if other_buildings.length > MAX_TEMPORARY_BUILDINGS:
                          return redirect('buildings.views.index')
                  else:
                          building = Building(utente=request.user, pronto=False)
                          building.save()
                          return redirect('buildings.views.generate', building_id=building)

          elif new_id >=0:

                  building = Building.objects.filter(pk=new_id)

                  if building.utente != request.user:
                          raise Http404
                  elif building.pronto:
                          return redirect('buildings.views.detail', building_id=new_id)
                  elif building.nome == None:
                          buildings= Building.objects.filter(pronto=True).order_by('utente')
                          session['buildings'] = buildings

                  session['building'] = building                        
          else:
                  raise Http404

          return render_to_response('buildings/generate/generate-index.html', session, context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

这里是模板"base.html"中的代码生成错误:

  <li><a href="{% url buildings.views.generate new_id=-1 %}">New Building</a></li>
Run Code Online (Sandbox Code Playgroud)

我看不出任何错误,请帮助我.

Dom*_*ger 6

据推测,这适用于正数.

-1与以下规格不符new_id:

(?P<new_id>\d+)
Run Code Online (Sandbox Code Playgroud)

你需要确保你也匹配-.我认为这应该有效(未经测试):

(?P<new_id>-?\d+)
Run Code Online (Sandbox Code Playgroud)