0

为了在我的一个模板中传递带有参数的函数,我使用了一个隐藏的输入,该输入重定向到函数所在的视图(该函数用于删除用户“关注”的用户)。由于 HttpResponseRedirect(reverse('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。(匹配.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)。为了更清楚,我打开了一个新主题。

4

1 回答 1

0

您需要通过argsas tuplewhile invoking reverse。还要确保使用包含应用程序名称的视图的完全限定名称。

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

参考

于 2012-11-05T17:19:52.543 回答