Python 处理Django单元测试用例中的可选url参数

Python 处理Django单元测试用例中的可选url参数,python,django,unit-testing,django-tests,Python,Django,Unit Testing,Django Tests,我创建了一个带有可选参数的动态Url e、 例如,如果我的url是www.example.com/getTest/1/ 现在url中的1是可选的,为了在视图中处理这个问题,我使用了类似的方法 def function(request, id=None): pass 因此,如果URL中没有id,那么该函数仍然适用于我。 但在单元案例中测试时,我面临着这个问题。 如果我使用url作为url=reverse('YesUsers:academypage\uURL',args=[None])它会给

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

e、 例如,如果我的url是www.example.com/getTest/1/ 现在url中的
1
是可选的,为了在视图中处理这个问题,我使用了类似的方法

def function(request, id=None):
   pass
因此,如果URL中没有id,那么该函数仍然适用于我。 但在单元案例中测试时,我面临着这个问题。 如果我使用url作为
url=reverse('YesUsers:academypage\uURL',args=[None])
它会给出错误

NoReverseMatch:找不到参数“('new',None)”和关键字参数“{}”的“academypage\u url”的相反形式。

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

编辑:

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

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

r'^getTest/(?P<action>\w+)/(?P<id>\d+)?$'
或者通过传递一个空列表

url = reverse('yescourse:academypage_url', args=[])
或者通过传递
None

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

但是通过传递一个包含
None

的列表not如果执行
args=[]
,会发生什么?你能显示你的url.py吗?@DanielRoseman仍然会得到相同的错误
和参数“()”
,对于url我已经更新了我的问题谢谢它对我有用,再问一个问题如果url中的两个参数都是可选的,那么我的url模式会是什么,
/
是否也将替换为
?如果您想使这两个参数都成为可选参数(这意味着您可以没有动作也没有id,没有动作和id,一个动作但没有id),您的模式应该是
r'^getTest(?:/(?P\w+)(?:/(?P\d+))$”
,函数的签名
(请求,动作=无,id=无)
,您可能只需要在
reverse()
url
templatetag中使用“命名参数”(
kwargs
)版本-但是使用此表单总是比较安全的,因为它允许您自由地重新组织url模式。
url = reverse('yescourse:academypage_url', args=None)