Python 处理Django单元测试用例中的可选url参数
我创建了一个带有可选参数的动态Url e、 例如,如果我的url是www.example.com/getTest/1/ 现在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])它会给
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)