【问题标题】:Override url error: global name 'url' is not defined覆盖 url 错误:未定义全局名称“url”
【发布时间】:2016-01-14 12:21:46
【问题描述】:

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

资源.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

【问题讨论】:

    标签: django tastypie


    【解决方案1】:

    你需要导入url

    from django.conf.urls import url
    

    【讨论】:

    • 谢谢,但我收到了一个并非所有参数格式错误。我正在使用 Django 1.8 和 sweetpie 0.12.2 我想知道我的 resources.py 覆盖 url 上的语法是否错误
    【解决方案2】:

    django.conf.urls.default 已在 django 1.6 中删除,如 depreciation notes 所述:

    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())
    

    【讨论】:

    • 谢谢。我将 url 更改为 `url(r"^register/", self.wrap_view('register_user'), name="api_register_user"), 并尝试通过 curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"cellphone": "cell", "password": "pass", "email": "email"}' http://localhost:8000/api/v1/lcuser/register/ 调用它但我收到错误 HTTP/1.0 501 未实现
    • 我的错。网址错误,应该是url(r"^(?P&lt;resource_name&gt;%s)/register%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('register_user'), name="api_register_user"),
    • 这超出了主题,但我如何访问请求数据? request.data['email'] 返回错误
    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多