为了在我的一个模板中传递带参数的函数,我使用了一个隐藏的输入,该输入重定向到函数所在的视图(该函数用于删除用户“跟随”的用户)。然后,由于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)。为了更清楚,我开了一个新主题。
答案 0 :(得分:0)
您需要在调用args
时将tuple
作为reverse
传递。另外,请确保使用视图的完全限定名称,包括应用程序名称。
return HttpResponseRedirect(reverse('appname.views.viewname', args=(match_id,)))