【问题标题】:'str' object has no attribute 'resolve' when access admin site访问管理站点时,“str”对象没有属性“resolve”
【发布时间】:2011-08-11 03:33:01
【问题描述】:

我不断收到此错误: “str”对象没有“resolve”属性

当尝试访问 django 管理站点时,我无法弄清楚 为什么。 我的项目中有应用程序,它们有自己的 admin.py 文件。 这会导致它吗? 这是我的 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)), 

...

这是追溯:

'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]) 

【问题讨论】:

    标签: django admin


    【解决方案1】:

    根据此处发布的出色答案: http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/

    这个错误通常有几个来源:

    1. 您错过了“模式关键字”:

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

      这应该改为:

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

      请注意,在 Django 1.8+ 中,最好使用正则表达式列表而不是 patterns

      urlpatterns = [
          (r'^$', direct_to_template, {'template' : 'a.html'}),
          ...
      ]
      
    2. 您在某些元组中遗漏了一个逗号,例如:

      (r'^hello/$' 'views.whatever') 
      
    3. 您使用三引号注释掉了一些 url()

    4. 你不小心把右括号放在了错误的地方:

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

      代替:

      (r'^(?P\d{4})/$', 'archive_year', entry_info_dict, 'coltrane_entry_archive_year'),
      
    5. 您将ROOT_URLCONF 设置为列表

    6. 从模式元组迁移到常规列表时,您忘记删除模式的空 '' 参数。

    如果您的代码中没有这种情况之一,请仔细检查。

    【讨论】:

    • 您可能希望在此处实际包含答案,而不是仅仅链接到外部站点。这意味着访问者不必去其他任何地方,并且可以防止您的答案在该网站出现故障/消失时变得无效。
    • 很好的答案,这解决了我的问题(由于三重引用了列表中的某些项目)
    • 天啊!您使用三引号注释掉了一些 url()s
    • 从元组迁移到列表时,如果错过删除 patterns 的空 '' 参数,还有一个。
    【解决方案2】:

    对我来说,这导致了问题:

    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'),
    """
    )
    

    这解决了它:

    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'),
    """
    

    我在http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/的评论中看到了这种可能性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2016-11-26
      • 2016-09-20
      • 2019-03-25
      相关资源
      最近更新 更多