2

我创建了一个带有可选参数的动态网址

例如,如果我的 url 是www.example.com/getTest/1/ 现在1url 中的 this 是可选的,要在我使用过的视图中处理这个 None like

def function(request, id=None):
   pass

因此,如果 URL 中没有 id,那么该功能仍然适用于我。但是我在单元案例中对此进行测试时遇到了问题。如果我使用 url 因为url = reverse('yescourse:academypage_url', args=[None])它给了我错误

NoReverseMatch: Reverse for 'academypage_url' with arguments '('new', None)' and keyword arguments '{}' not found.

所以请告诉我如何在测试用例或反向中处理这些可选 url。

编辑 :

 url(r'^getTest/(?P<action>\w+)/(?P<id>\d*)$', 'app.views.create_edit_academypage', name='academypage_url'),
4

1 回答 1

7

您将视图函数的id参数设为可选,但在 url 模式中它不是可选的。您首先需要将您的模式重写为:

r'^getTest/(?P<action>\w+)/(?P<id>\d+)?$'

=> 整个 'id' 子模式是可选的,但如果不是,它必须匹配一个或多个数字。

args完成后,您可以通过不传递任何norkwargs参数来反转 url :

url = reverse('yescourse:academypage_url')

或通过传递一个空列表

url = reverse('yescourse:academypage_url', args=[])

或通过None

url = reverse('yescourse:academypage_url', args=None)

不是通过传递包含None.

于 2014-11-21T11:20:36.343 回答