全局名称'reverse'未定义。

15

我正在使用 django-paypal 库在我的网站上使用 PayPal 支付。

按照 示例,我已经设置了 paypal_dict 并添加了表单。

paypal_dict = {
        "business": settings.PAYPAL_RECEIVER_EMAIL,
        "amount": "10000000.00",
        "item_name": "name of the item",
        "invoice": "unique-invoice-id",
        "notify_url": "https://www.example.com" + reverse('paypal-ipn'),
        "return_url": "https://www.example.com/your-return-location/",
        "cancel_return": "https://www.example.com/your-cancel-location/",

    }

不过,我遇到了错误 global name 'reverse' is not defined。 我正在使用Python 2.7.9,发生了什么?


你想要反转字符串吗? - Scott
老实说,我真不确定它想要达到什么目的,这是直接从示例中来的,而且尝试使用它会引发错误。 - Magic
没有名为 reverse 的内置函数。您在某个地方定义了它吗?还是期望导入了一个? - abarnert
追踪信息在哪里?有问题的代码呢? - Zizouz212
1
这可能是 Django 中的 reverse 函数,如果作为 Django 视图加载您的模块,则可以免费获得该函数,但如果以其他方式导入或运行它,则不行。 - abarnert
7个回答

48

您需要导入函数reverse

对于Django 2.0及以上版本

from django.urls import reverse

对于较旧的Django版本:

from django.core.urlresolvers import reverse

这句话特指于Django,但看起来您仍然在尝试构建一个URL,所以这可能是您想要的。


7

在Django2.0中:

from django.urls import reverse

4

--在 models.py 文件中使用以下代码......

from django.urls import reverse

def get_absolute_url(self):
    return reverse('url-name', kwargs={'pk':self.pk})

1

reverse不是Python的内置函数。可能是某个Web框架中的函数,用于进行反向路由(从名称获取URL路径)。notify_url必须是您的应用程序中Paypal将发送通知到的URL。


1
在Python中没有内置的reverse函数(有一个reversed,但我怀疑这不是你想要的)。在Django中有一个reverse函数。但是只有在作为Django视图或类似代码加载时才能获得Django内置函数;如果以其他方式导入或运行此代码,则该函数将不存在。因此,可能是在之前的说明中出现了错误,实际上并没有创建视图。(Django-PayPal的说明显然是为已经是有经验的Django开发人员编写的;如果您不理解基本的Django概念,您可能需要先通过教程进行学习。)

1

PayPal-IPN的URL可能在Django-PayPal的URL中定义。我猜导入Django的反向函数将解决这个问题。

from django.core.urlresolvers import reverse

0
我遇到了“reverse未定义”的问题,按照这个解决方案操作后仍然出现错误。我在所有的urls文件中导入了reverse,但是没有效果。然后我在views.py文件中导入了reverse,我的本地服务器就可以工作了。
原始的解决方案是正确的,但作者没有提到在哪里导入reverse,所以我想我可以补充一下原始答案。如果我错了,我很抱歉,但这对我有效。

你的回答必须以易于理解的格式呈现,类似于问题和解决方案。谢谢。 - Muhammad Faizan Fareed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接