Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django UrlResolver用于动态生成的ID_Python_Django - Fatal编程技术网

Python Django UrlResolver用于动态生成的ID

Python Django UrlResolver用于动态生成的ID,python,django,Python,Django,我必须测试如下所示的URL: 但是我不知道如何对reverse()函数这样说。这是我的URL.py from django.conf.urls import patterns, url from payment import views from payment.msn import * urlpatterns = patterns('', url(r'^$', views.index, name='index'), url(r'^msnstats/', MsnStats.f

我必须测试如下所示的URL:

但是我不知道如何对
reverse()
函数这样说。这是我的URL.py

from django.conf.urls import patterns, url
from payment import views
from payment.msn import *

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^msnstats/', MsnStats.finish_transaction, name='finish_transaction'),
    url(r'^pay/(?P<payment_id>\w+)/$', views.pay, name='pay')
)
为每个计划生成
payment\u id
,因此我首先创建一个计划,从数据库中获取其
payment\u id
,并以某种方式调用它。我只是不知道如何使用反向

from django.core.urlresolvers import reverse
url = reverse('pay', args=[plan.payment_id])

两个版本都有效

更新:如果使用
名称空间
参数包含
付款.url
,则必须将此名称空间添加到
反向()调用中的url名称中

项目/url.py

url(r'^payment/', include('payment.urls', namespace='payment')),
response = self.client.get(reverse('payment:pay', args=[plan.payment_id]))
付款/测试.py

url(r'^payment/', include('payment.urls', namespace='payment')),
response = self.client.get(reverse('payment:pay', args=[plan.payment_id]))

到底是什么让人困惑呢?我不确定从reverse的角度看,我的URL的哪一部分是一个“参数”。到底是什么让你有权如此咆哮?一点也不咆哮。我这样问是为了a)我们可以帮助您,b)我们可以在必要时改进文档。事实证明,我已经编写了第一个解决方案,但它不起作用,所以我在这里发布了。这是测试函数:
def test\u msn\u payment\u id(self):plan=create\u payment\u plan('lalalala')response=self.client.get(reverse('pay',args=[plan.payment\u id])self.assertEqual(response.status\u code,200)
其中失败:
django.core.urlresolvers.NoReverseMatch:reverse表示带参数的“pay”('34ffb5d7',)'和关键字参数{}未找到。尝试了0个模式:[]
每次创建新计划时都会生成付款id。Django确实将新版本的url解析程序中的相反内容移动到了url。如果您使用的是更高版本的django,那么您可能需要改变这一点。