Django urlresolvers反向动态生成的id

时间:2015-03-11 15:40:35

标签: python django

我必须测试看起来像这样的网址:

  

http://127.0.0.1:8000/payment/pay/513623c9/

但我不确定如何对reverse()函数说这个。这是我的urls.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')
)

这就是我的views.py的相关部分:

def pay(request, payment_id):
    try:
        plan=PaymentPlan.objects.get(payment_id=payment_id)

为每个计划生成payment_id,因此我首先创建一个计划,从数据库中获取其payment_id,然后以某种方式调用它。我只是不确定如何使用反向。

1 个答案:

答案 0 :(得分:2)

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

url = reverse('pay', kwargs={'payment_id': plan.payment_id})

两个版本都有效。

更新:如果您将payment.urls包含namespace参数,那么您必须将此命名空间添加到reverse()调用中的网址名称:

<强>项目/ urls.py

url(r'^payment/', include('payment.urls', namespace='payment')),

付款/ tests.py

response = self.client.get(reverse('payment:pay', args=[plan.payment_id]))