Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'str' object has no attribute 'resolve' when access admin site

Tags:

django

admin

I keep getting this error: 'str' object has no attribute 'resolve'

when trying to accessing the django admin site and I can't figure out why. I have apps within my project that have their own admin.py files. Could this cause it? here is my urls.py:

from django.conf.urls.defaults import *
import settings
from django.contrib.auth.views import login, logout
from views import index, simple, complex
from django.views.generic.simple import direct_to_template

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Example:
    # (r'^django_jchat/', include('django_jchat.foo.urls')),
    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
     (r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)), 

...

Heres the trace back:

'str' object has no attribute 'resolve'
Request Method:         GET
Django Version:         1.3
Exception Type:         AttributeError
Exception Value:
'str' object has no attribute 'resolve'
Exception Location:     /home/dockedin/webapps/peebletalk/lib/python2.7/
django/core/urlresolvers.py in resolve, line 252
Python Executable:      /usr/local/bin/python
Python Version:         2.7.1
Python Path:
['/home/dockedin/webapps/peebletalk',
 '/home/dockedin/webapps/peebletalk/lib/python2.7',
 '/home/dockedin/lib/python2.7',
 '/usr/local/lib/python27.zip',
 '/usr/local/lib/python2.7',
 '/usr/local/lib/python2.7/plat-linux2',
 '/usr/local/lib/python2.7/lib-tk',
 '/usr/local/lib/python2.7/lib-old',
 '/usr/local/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/site-packages/PIL']
Server time:    Wed, 10 Aug 2011 15:24:55 -0400
Traceback Switch to copy-and-paste view
    /home/dockedin/webapps/peebletalk/lib/python2.7/django/core/
handlers/base.py in get_response
                            response = middleware_method(request)
        ...
    ▶ Local vars
    /home/dockedin/webapps/peebletalk/lib/python2.7/django/middleware/
common.py in process_request
                    if (not _is_valid_path(request.path_info, urlconf)
and
          ...
    ▶ Local vars
    /home/dockedin/webapps/peebletalk/lib/python2.7/django/middleware/
common.py in _is_valid_path
                urlresolvers.resolve(path, urlconf)

        ...
    ▶ Local vars
    /home/dockedin/webapps/peebletalk/lib/python2.7/django/core/
urlresolvers.py in resolve
            return get_resolver(urlconf).resolve(path)
            ...
    ▶ Local vars
    /home/dockedin/webapps/peebletalk/lib/python2.7/django/core/
urlresolvers.py in resolve
            def resolve(self, path):
                tried = []
                match = self.regex.search(path)
                if match:
                    new_path = path[match.end():]
                    for pattern in self.url_patterns:
                        try:
                            sub_match = pattern.resolve(new_path)
        ...
                        except Resolver404, e:
                            sub_tried = e.args[0].get('tried')
                            if sub_tried is not None:
                                tried.extend([[pattern] + t for t in
sub_tried])
                            else:
                                tried.append([pattern]) 
like image 433
de1337ed Avatar asked Aug 11 '11 03:08

de1337ed


2 Answers

According to excellent answer posted here: http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/

There are generally several sources of this error:

  1. You missed 'pattern keyword':

    urlpatterns = ('',
    (r'^$', direct_to_template, {'template' : 'a.html'}),
    # ...
    

    this should be changed to:

    urlpatterns = patterns('',
    (r'^$', direct_to_template, {'template' : 'a.html'}),
    # ...
    

    Note that in Django 1.8+, it's better to use a list of regexes instead of patterns.

    urlpatterns = [
        (r'^$', direct_to_template, {'template' : 'a.html'}),
        ...
    ]
    
  2. You missed a comma in some tuple, like:

    (r'^hello/$' 'views.whatever') 
    
  3. You commented out some url()s using triple-quotes

  4. You carelessly leave a closing bracket in the wrong place:

    (r'^(?P\d{4})/$', 'archive_year', entry_info_dict), 'coltrane_entry_archive_year',
    

    instead of:

    (r'^(?P\d{4})/$', 'archive_year', entry_info_dict, 'coltrane_entry_archive_year'),
    
  5. You set ROOT_URLCONF to be a list

  6. When migrating from the pattern tuples to a regular list you forgot to remove the empty '' argument of the pattern.

Please check carefully if you don't have one of this cases in your code.

like image 113
mnowotka Avatar answered Oct 02 '22 18:10

mnowotka


For me, this caused the problem:

urlpatterns = patterns('',
    url(r'^all/$', 'album.views.albums'),
    """
    url(r'^create/$', 'album.views.create'),
    url(r'^get/(?P<album_id>\d+)/$', 'album.views.album'),
    url(r'^like/(?P<album_id>\d+)/$', 'album.views.like_album'),
"""
)

and this solved it:

urlpatterns = patterns('',
    url(r'^all/$', 'album.views.albums'),
)
"""
    url(r'^create/$', 'album.views.create'),
    url(r'^get/(?P<album_id>\d+)/$', 'album.views.album'),
    url(r'^like/(?P<album_id>\d+)/$', 'album.views.like_album'),
"""

I saw this possibility in a comment on http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/

like image 41
aliteralmind Avatar answered Oct 02 '22 19:10

aliteralmind