【发布时间】:2018-07-19 01:55:33
【问题描述】:
我不知道如何在 django 中使用 reverse 函数。我明白了,
ValueError: dictionary update sequence element #0 has length 1; 2 is required
我可以直接硬编码正常工作的网址,但我想以标准方式进行。
主 urls.py
urlpatterns = [
url(r'^nmailadmin/', admin.site.urls),
url(r'^api/v1/',include('Core.Login.urls',namespace='login')),
url(r'^api/v1/mail/',include('Core.Mail.urls',namespace='mail')),
]
我已经为登录和邮件 API 提供了命名空间。
当我尝试访问这样的邮件网址时
def test_0list_folders(self):
url = reverse('mail:folder_list', kwargs={'server':0})
response = self.client.get('/api/v1/mail/folder_list/0/', follow=True)
self.assertEqual(status.HTTP_200_OK, response.status_code)
我遇到这样的错误。
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/next/PycharmProjects/Nmail/Nmail-Server/Core/Mail/tests.py", line 25, in test_0list_folders
url = reverse('mail:folder_list', kwargs={'server':0})
File "/home/next/venv/NmailVenv/lib/python3.6/site-packages/django/urls/base.py", line 91, in reverse
return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/home/next/venv/NmailVenv/lib/python3.6/site-packages/django/urls/resolvers.py", line 436, in _reverse_with_prefix
self._populate()
File "/home/next/venv/NmailVenv/lib/python3.6/site-packages/django/urls/resolvers.py", line 309, in _populate
dict(defaults, **pattern.default_kwargs),
ValueError: dictionary update sequence element #0 has length 1; 2 is required
----------------------------------------------------------------------
这是我的邮件应用程序的 urls 文件。
urlpatterns = [
url(r'folder_list/(?P<server>\d+)/$', folder_list,name='folder_list'),
url(r'^auth_login/$', login_auth, name='auth_login'),
url(r'viewmsg/(?P<server>\d+)/(?P<folder>.*?)/(?P<uid>\d+)/$', viewmsg, name='viewmsg'),
url(r'action/(?P<action>.*?)/$', action, 'action'),
]
Django 版本:Django==1.11.7
【问题讨论】:
-
reverse('mail:auth_login')引发的错误,但您显示的网址格式不同。列出mail命名空间中存在的所有url -
我已经更新了网址,请检查。
-
还有 django 版本?
-
我正在使用 Django==1.11.7
标签: python django dictionary reverse django-testing