Override url error: global name 'url' is not defined

Override url error: global name 'url' is not defined

我尝试重写 url 来为不同类型的 url 调用特定方法。下面的代码

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

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

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

然后我得到 No module named defaults

您需要导入url

from django.conf.urls import url

depreciation notes:

中所述,django.conf.urls.default 在 django 1.6 中被删除

django.conf.urls.defaults will be removed. The functions include(), patterns() and url() plus handler404, handler500, are now available through 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())