重定向后保留对象的id。 Django的

时间:2012-11-05 16:39:12

标签: django

为了在我的一个模板中传递带参数的函数,我使用了一个隐藏的输入,该输入重定向到函数所在的视图(该函数用于删除用户“跟随”的用户)。然后,由于HttpResponseRedirect(反向('myview',args = [a number])),此视图会重定向到上一页。

问题是我重定向的页面需要一个参数(一个数字)。我希望将用户重定向到他所在的确切页面。

这是我的模板:

    <form method="post" action="{% url projet.views.remove_relationship %}">
    {% csrf_token %}
    <input type="hidden" name="remove_relationship" value="{{ user.id }}">
    <input type="submit" value="delete" />

观点:

   def remove_relationship(request):
      user = request.user
      if request.method == 'POST':
        user_id = request.POST['remove_relationship']
        user_id= int(user_id)
        user_name = User.objects.get(id=user_id)
        user.userprofile.remove_relationship(person=user_name.userprofile, status=1)
     return HttpResponseRedirect(reverse('myoriginalview', args=[A NUMBER]))

用户来自的页面如:www.mysite / myoriginalview / ANUMBER。我想将他重定向到这个确切的页面

在原始视图中,数字对应于对象ID。 (match.id)。

所以我要做的就是获取原始视图的match.id,将其传递给我的视图remove_relationship,以便在“args = [match.id]”中使用它。

那么如何从原始视图中获取此ID并将其传递到我的新视图中?

以下是我的尝试:

在我的models.py中:

@models.permalink
def get_absolute_url_remove_relationship(self):
    return ('remove_relationship', (), {'dub_id': self.id})

在我的模板中使用它:

<form method="post" action="{{get_absolute_url_remove_relationship}}">
    {% csrf_token %}
    <input type="hidden" name="remove_relationship" value="{{ user.id }}">
    <input type="submit" value="delete" />

在我看来:

def remove_relationship(request, match_id=None):
match_id= int(match_id)
user = request.user
if request.method == 'POST':
    user_id = request.POST['remove_relationship']
    user_id= int(user_id)
    user_name = User.objects.get(id=user_id)
    user.userprofile.remove_relationship(person=user_name.userprofile, status=1)

return HttpResponseRedirect(reverse('terrain', args=[match_id]))

我在url.py中做了必要的修改

因此,当用户点击“删除”按钮删除他正在关注的用户时,重定向效果很好,但用户不会被删除。看起来该函数不再使用了,而当我使用{%url projet.views.remove_relationship%}时,用户被删除了,但没有重定向。

非常欢迎任何帮助。

PS:问题来自我之前提出的另一个问题(http://stackoverflow.com/questions/13233794/function-with-arguments-in-a-template-django)。为了更清楚,我开了一个新主题。

1 个答案:

答案 0 :(得分:0)

您需要在调用args时将tuple作为reverse传递。另外,请确保使用视图的完全限定名称,包括应用程序名称。

return HttpResponseRedirect(reverse('appname.views.viewname', args=(match_id,)))

Reference