Python Django UrlResolver用于动态生成的ID
我必须测试如下所示的URL: 但是我不知道如何对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
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,那么您可能需要改变这一点。