views:

1748

answers:

3

In projects/urls.py I have:

urlpatterns = patterns('bizteen.projects.views',
    url(r'^browse/$', 'browse', name='projects-browse-main'),
    url(r'^browse/(\d+)/$', 'browse', name='projects-browse'),
    url(r'^create/$', 'create', name='projects-create'),
    url(r'^(\d+)/$', 'view_project', name='projects-view'),
)

And in a template I have:

<a href="{% url projects-browse-main %}">Browse projects</a>

But an error shows up.

TemplateSyntaxError at /

Caught an exception while rendering: Reverse for 'bizteen.projects-browse-main' with arguments '()' and keyword arguments '{}' not found.

The most I can figure out is that the names are being treated like views instead. Why would this happen?

from bizteen.projects.views:

from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from bizteen.projects.models import Project, ProjectComment
from django.template import RequestContext

def browse(request, page=0):
    page_start = page * 25
    page_end = page_start + 25
    project_list = Project.objects.order_by('date_created').reverse([page_start:page_end]
    return render_to_response('browse_projects.html', {'project_list': project_list}, context_instance=RequestContext(request))

and the main urls.py:

from django.conf.urls.defaults import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^users/', include('bizteen.userthings.urls')),
    (r'^projects/', include('bizteen.projects.urls')),
    url(r'^$', 'bizteen.userthings.views.home', name='main-home'),

    url(r'^profile/$', 'bizteen.userthings.user-profile'),

    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/(.*)', admin.site.root),

    url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': 'templates/static'}),
)

traceback:

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 1.0.2 final
Python Version: 2.5.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.admin',
 'bizteen.userthings',
 'bizteen.projects']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')


Template error:
In template /Users/xenon/bizteen/trunk/web/bizteen/templates/base.html, error at line 33
   Caught an exception while rendering: Reverse for 'bizteen.main-home' with arguments '()' and keyword arguments '{}' not found.
   23 :      <div class="span-24"> 


   24 :        <div class="span-10">&nbsp; </div>


   25 :        <div class="span-8">


   26 :         <div id='quick_user_menu'>


   27 :          <b>Hi there!</b> 


   28 :          {% if user.is_authenticated %}


   29 :          <b><a href="{{ user.get_absolute_url }}">{{ user.username }}</a></b>


   30 :           <a href='/user/home/' class='lightblue'>Dashboard</a> |  


   31 :           (<a href='/user/logout/' class='anchor'>logout</a>)


   32 :          {% else %}


   33 :          <a href=' {% url main-home %} ' class='lightblue' rel='facebox'>Sign In</a> 


   34 :          (<a href='/user/signup/'   class='anchor'>Don't have an account?</a>)


   35 :          


   36 :          {% endif %}


   37 :         </div>


   38 :        </div>


   39 :      </div>


   40 :      <div class="span-24"> 


   41 :       <div id='header'>


   42 :        <div class="span-8">


   43 :         <A href='/user/home/'><img src='http://localhost:8000/site_media/images/logo.png' alt='BizTeen logo image' align='left'/></a>


Traceback:
File "/Library/Python/2.5/site-packages/django/core/handlers/base.py" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File "/Users/xenon/bizteen/trunk/web/bizteen/../bizteen/userthings/views.py" in home
  29.     return render_to_response('home.html', context_instance=RequestContext(request))
File "/Library/Python/2.5/site-packages/django/shortcuts/__init__.py" in render_to_response
  18.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/Library/Python/2.5/site-packages/django/template/loader.py" in render_to_string
  107.     return t.render(context_instance)
File "/Library/Python/2.5/site-packages/django/template/__init__.py" in render
  176.         return self.nodelist.render(context)
File "/Library/Python/2.5/site-packages/django/template/__init__.py" in render
  768.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.5/site-packages/django/template/debug.py" in render_node
  71.             result = node.render(context)
File "/Library/Python/2.5/site-packages/django/template/loader_tags.py" in render
  97.         return compiled_parent.render(context)
File "/Library/Python/2.5/site-packages/django/template/__init__.py" in render
  176.         return self.nodelist.render(context)
File "/Library/Python/2.5/site-packages/django/template/__init__.py" in render
  768.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.5/site-packages/django/template/debug.py" in render_node
  71.             result = node.render(context)
File "/Library/Python/2.5/site-packages/django/template/defaulttags.py" in render
  246.             return self.nodelist_false.render(context)
File "/Library/Python/2.5/site-packages/django/template/__init__.py" in render
  768.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.5/site-packages/django/template/debug.py" in render_node
  81.             raise wrapped

Exception Type: TemplateSyntaxError at /
Exception Value: Caught an exception while rendering: Reverse for 'bizteen.main-home' with arguments '()' and keyword arguments '{}' not found.

Original Traceback (most recent call last):
  File "/Library/Python/2.5/site-packages/django/template/debug.py", line 71, in render_node
    result = node.render(context)
  File "/Library/Python/2.5/site-packages/django/template/defaulttags.py", line 378, in render
    args=args, kwargs=kwargs)
  File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 254, in reverse
    *args, **kwargs)))
  File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 243, in reverse
    "arguments '%s' not found." % (lookup_view, args, kwargs))
NoReverseMatch: Reverse for 'bizteen.main-home' with arguments '()' and keyword arguments '{}' not found.
+2  A: 

I think it might be because

url(r'^browse/$', 'browse', name='projects-browse-main'),
url(r'^browse/(\d+)/$', 'browse', name='projects-browse'),

both refer to the same function 'browse' in 'bizteen.projects.views' but one of them takes an argument (\d+) and the other one doesn't. Have you specified a default parameter for the function? Like so

def browse(request, project="1"):

If not that, there might be a problem in your project-wide urls.py (your example looks like an excerpt from an application urls.py). Do you have something like this in your project-wide urls.py?

urlpatterns = patterns('',
    (r'^project/', include('bizteen.project.urls))
)
lemonad
Yes, I specified a default there. Additionally, the problem applies to all my URLs, not just the ones that share a view.
OwenK
I do have working include statements, yes. names from my main urls.py don't work either.
OwenK
Can you edit your question and include an excerpt of where you include projects.urls and the header of the bizteen.projects.views.browse function?
lemonad
I added those files.
OwenK
I'm trying to reproduce your problem on my end but with no success. Perhaps you could include the original traceback in your question?
lemonad
I added the traceback. I'm running Python 2.5.1, could that be part of it?
OwenK
You managed to solve your problem, that's Great! :)
lemonad
+2  A: 

From my urls.py:

url(r'^profile/$', 'bizteen.userthings.user-profile'),

That view didn't exist. I feel dumb.

OwenK
+1  A: 

I personnaly import my view in my urls.py and give them as second argument of url() fonctions:

from myapp import views as myapp_views

urlpatterns = patterns('',   
   url("^myapp/blah/$", myapp_views.blah, name="myapp_blah"),
)

It avoids getting runtime errors, and allows you to add decorators like 'login_required' :

from myapp import views as myapp_views

urlpatterns = patterns('',   
   url("^myapp/blah/$", login_required(myapp_views.blah), name="myapp_blah"),
)
dzen