在Django中如何将带有任意参数的反转URL从模板传递到视图

时间:2014-12-14 19:00:26

标签: django templates

我有一个观点:

def partnered_item_edit(request, item_id, return_to='delivery_manager'):
   item = get_object_or_404(PartneredItem, pk=item_id)
...    
delivery.save()
return redirect(return_to)

这样做的目的是使其可重复使用,以便我可以从程序中的不同位置使用此视图,并将其重定向到用户之前工作的视图。

在模板中我有:

<p><a href="{% url 'partnered_item_edit' item_id=item.id return_to='delivery_view' %}" class="btn btn-default ...

我当前想要重定向到的视图声明如下:

def delivery_view(request, delivery_id):
    delivery = get_object_or_404(Delivery, pk=delivery_id)
...

但我也希望它在程序的其他部分重定向到这个,例如:

def delivery_manager(request):
     date = datetime.date.today()

(这个不需要delivery_id

我也想将此视图挂钩到其他模板中,并将此技术用于其他重定向/视图组合。基本上我正在寻找允许我这样做的事情:

reverse('delivery_view', args=('delivery_id'))

reverse('delivery_manager')

在模板中。

然后......我想努力使这项工作变得艰难吗?我是否需要制作模板过滤器才能使其正常工作?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我建议您更改partnered_item_edit视图的位逻辑:

def partnered_item_edit(request, item_id, return_to_delivery=False):
   item = get_object_or_404(PartneredItem, pk=item_id)

   ...   
   delivery.save()

   if return_to_delivery:
       return redirect('delivery_view', args=(delivery.pk,))
   else:
       return redirect('delivery_manager')

如果要编辑项目并重定向到交付管理器,请在模板中使用:

{% url 'partnered_item_edit' item_id=item.id %}

否则,如果您想重定向到交付使用:

{% url 'partnered_item_edit' item_id=item.id return_to_delivery=True %}

希望这些有帮助!