2016-01-09 28 views
0

我有兩個模型,如下所示:Django中的反向函數是如何工作的?

class Respond(models.Model): 
     id = models.AutoField(primary_key=True, unique=True) 

class Product(models.Model): 
     responde = models.ForeignKey(Responde, null=True) 
     name = models.CharField(max_length=255) 
     description = models.CharField(max_length=10, blank=True, null=True) 
     price = models.CharField(max_length=50, blank=True, null=True) 

和我有形式提交後,將數據發送到遠程服務器,然後接收XML響應。我有一個解析xml文件或文件類對象的腳本。比我保存xml數據到數據庫。

class MyView(View): 

     template_name = 'myapp/form.html' 

     def get(self, request, *args, **kwargs): 
       my_form = MyForm(prefix='my_form') 
       return render(request, self.template_name, { 'my_form' : my_form }) 

     def post(self, request, *args, **kwargs): 
       my_form = MyForm(request.POST, prefix='my_form') 
       if my_form.is_valid(): 
       ## cleaned data 
       r = Respond.objects.create() 
       for xmldata in products_xml: 
        p = Product(
         name=xmldata['ProductName'], 
         description=xmldata['ProductDescription'], 
         price=xmlData['ProductPrice'], 
        ) 
        p.respond = r 
        p.save() 
       r.product_set.all() 
     return HttpResponseRedirect(reverse(respond:'result', args=(r.id))) 

之後,我想重定向到顯示所有保存響應ID數據的頁面。

在我的情況下,invalid syntax錯誤與reverse函數字符串。我閱讀有關它的官方文檔,但我不太瞭解如何工作反轉功能。 我views.py:

def result(request): 
     all_products = Products.objects.all() 
     template = get_template("booking/results.html") 
     context = Context({ 'all_products':all_products }) 
     html = template.render(context) 
     return HttpResponse(html) 

我的urls.py看起來是這樣的:

urlpatterns = patterns('', 
     url(r'^$', views.MyView.as_view()), 
     url(r'^(?P<respond_id>[0-9]+)/result/$', name='result'), 
) 

幫助我明白應該怎麼看起來像URL配置反向功能。謝謝。

回答

1

取而代之的是:

return HttpResponseRedirect(reverse(respond:'result', args=(r.id))) 

試試這個:

return HttpResponseRedirect(reverse('result', args=[r.id])) 
+0

只是想指出,'ARGS =(r.id)'會的工作,太。請注意尾部的逗號。 – xyres

1

首先你缺少實際的功能,應該在你的urlpatterns被稱爲:

urlpatterns = patterns('', 
     url(r'^$', views.MyView.as_view()), 
     url(r'^(?P<respond_id>[0-9]+)/result/$', views.result, name='result'), 
) 

的反向函數的參數應該是:

reverse('result', args=['your-arguments']) 

它被描述here

所以,你開始你想扭轉視圖的名稱,如果需要的話,您將追加argskwargs