Django 为什么assertRedirects()需要字符串而不是URL?
为什么这两个断言有效:Django 为什么assertRedirects()需要字符串而不是URL?,django,django-testing,Django,Django Testing,为什么这两个断言有效: from django.test import TestCase class MyTests(TestCase): def test_1(self): response = self.client.get(reverse_lazy('create_cm')) self.assertRedirects(response, reverse('upload_booth')) self.assertRedirects(r
from django.test import TestCase
class MyTests(TestCase):
def test_1(self):
response = self.client.get(reverse_lazy('create_cm'))
self.assertRedirects(response, reverse('upload_booth'))
self.assertRedirects(response, str(reverse_lazy('upload_booth')))
但这并不是:
self.assertRedirects(response, reverse_lazy('upload_booth'))
而是生成以下错误消息:
文件
“/usr/local/lib/python2.7/dist packages/django/test/testcases.py”,
第300行,在assertRedirects中
e_查询,e_片段))文件“/usr/lib/python2.7/urlparse.py”,第234行,在urlunsplit中 url='/'+(netloc或“”)+url类型错误:强制使用Unicode:需要字符串或缓冲区,找到代理
reverse和reverse_lazy的返回值到底有什么区别?为什么它们不同?惰性函数的实现不会在实例化时直接返回值,而是返回代理对象。当对该对象进行特定调用时,将计算并返回其实际值 如果是
反向_lazy
,您可以在自己的示例中看到这一点:
str(reverse_lazy('upload_booth'))
这是对代理对象的\uuu str\uu
方法的调用,然后实际返回一个字符串而不是代理对象
所有实施细节可在