覆盖网址错误:未定义全局名称“网址”

时间:2016-01-14 12:21:47

标签: django tastypie

我正在使用覆盖网址来为不同类型的网址调用特定方法。代码

Resources.py

class LCUserResource(ModelResource):
    class Meta:
        queryset = LCUser.objects.all()
        resource_name= 'lcuser'
        authorization = Authorization()

def override_urls(self):
    return [
        url(r'^register/'%
            (self._meta.resource_name, trailing_slash()), self.wrap_view('register_user'), name="api_register_user"),
    ]

urls.py

v1_api = Api(api_name='v1')
v1_api.register(LCUserResource())

urlpatterns = [
    url(r'^api/', include(v1_api.urls)),
]

我正试图通过http://localhost:8000/api/v1/lcuser/register/

访问api

但我收到错误全局名称网址未定义。

我尝试导入 来自django.conf.urls.defaults import *

然后我得到No模块名为defaults

2 个答案:

答案 0 :(得分:4)

您需要导入网址

from django.conf.urls import url

答案 1 :(得分:1)

depreciation notes中所述,django 1.6中删除了django.conf.urls.default

  

django.conf.urls.defaults将被删除。功能包括(),   patterns()和url()以及handler404,handler500现在可用   通过django.conf.urls。

因此,tastypie的文档似乎尚未针对django 1.8更新;您可以通过修复发布说明中提到的导入来修复导入错误:

from django.conf.urls import url

这将解决一个问题 - 您的下一个问题是:

r'^register/'% (self._meta.resource_name, trailing_slash())

在解析字符串(%)时,不确定您在尝试做什么,但没有可替换的变量。这是同样的问题:

>>> a = 'world'
>>> 'hello' % (a,)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

您可能需要以下内容:

r"^register/(?P<resource_name>%s)%s$" % (self._meta.resource_name, trailing_slash())