【问题标题】:unsupported operand type(s) for +: 'RegexURLPattern' and 'unicode'+ 不支持的操作数类型:“RegexURLPattern”和“unicode”
【发布时间】:2014-02-14 00:17:14
【问题描述】:

我在一个干净的Python 2.7 Virtual Environment (virtualenv) 上运行Django (1, 6, 1, 'final', 0)。 Django 似乎可以工作,但是当我将正则表达式添加到我的 urls.py 文件时,我收到标题中显示的错误。我已经检查了谷歌的答案,但我能找到的只是一些相关的页面,这些页面没有回答我的问题。我对 Django 和 Python 还很陌生,所以我不知道是什么导致了这个错误。

堆栈跟踪显示如下:

./project/urls.py in <module>
    url('^', include('page.urls', namespace='page')),
./page/urls.py in <module>
    url('^dashboard/', 'page.views.back', name='back'),

这是我的 urls.py 文件:
domain.com/project/project/urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^', include('page.urls', namespace='page')),
    url(r'^admin/', include(admin.site.urls)),
)

domain.com/project/page/urls.py

from django.conf.urls import patterns, url

urlpatterns = patterns(
    url(r'^$', 'page.views.front', name='front'),
    url(r'^dashboard/', 'page.views.back', name='back'),
)

据我所知,我在其他 Django 项目中使用了这些文件的确切内容,但这意味着它与我为该项目设置的虚拟环境安装有关,我不知道问题的根源可能是什么。

如果有人能对这个主题有所了解,那就太好了。

编辑 1:
我认为不需要删除整个堆栈跟踪,因为其余部分是对 django 或 python 本身附带的脚本的跟踪,但这里是:

 /var/www/domain.com/local/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
                resolver_match = resolver.resolve(request.path_info)
/var/www/domain.com/local/lib/python2.7/site-packages/django/core/urlresolvers.py in resolve
            for pattern in self.url_patterns:
/var/www/domain.com/local/lib/python2.7/site-packages/django/core/urlresolvers.py in url_patterns
        patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
/var/www/domain.com/local/lib/python2.7/site-packages/django/core/urlresolvers.py in urlconf_module
            self._urlconf_module = import_module(self.urlconf_name)
/var/www/domain.com/local/lib/python2.7/site-packages/django/utils/importlib.py in import_module
        __import__(name)
./project/urls.py in <module>
    url(r'^', include('page.urls', namespace='page')),
/var/www/domain.com/local/lib/python2.7/site-packages/django/conf/urls/__init__.py in include
        urlconf_module = import_module(urlconf_module)
/var/www/domain.com/local/lib/python2.7/site-packages/django/utils/importlib.py in import_module
        __import__(name)
./page/urls.py in <module>
    url(r'^dashboard/', 'page.views.back', name='back'),
/var/www/domain.com/local/lib/python2.7/site-packages/django/conf/urls/__init__.py in patterns
            t.add_prefix(prefix)
/var/www/domain.com/local/lib/python2.7/site-packages/django/core/urlresolvers.py in add_prefix
        self._callback_str = prefix + '.' + self._callback_str

【问题讨论】:

  • 真的没有+ 在你得到那个错误的堆栈跟踪中的任何地方吗?这……相当令人费解。
  • 用完整的堆栈跟踪编辑了我的问题。

标签: python regex django unicode virtualenv


【解决方案1】:

您需要为patterns() 提供第一个参数,即字符串前缀。你没有,你的第一个参数是 url() 结果:

urlpatterns = patterns(
    url(r'^$', 'page.views.front', name='front'),
    url(r'^dashboard/', 'page.views.back', name='back'),
)

添加view prefix

urlpatterns = patterns('',
    url(r'^$', 'page.views.front', name='front'),
    url(r'^dashboard/', 'page.views.back', name='back'),
)

或者,因为你所有的网址都来自同一个模块:

urlpatterns = patterns('page.views',
    url(r'^$', 'front', name='front'),
    url(r'^dashboard/', 'back', name='back'),
)

【讨论】:

  • 我知道我会像过去那样看过去。这确实是问题所在。
猜你喜欢
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2016-03-21
  • 2015-11-23
相关资源
最近更新 更多