【问题标题】:Keep the id of an object after a redirection. Django重定向后保留对象的 id。姜戈
【发布时间】:2012-10-25 13:02:15
【问题描述】:

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

【问题讨论】:

    标签: django


    【解决方案1】:

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

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

    Reference

    【讨论】:

    • 谢谢,但问题还是一样。重定向有效,但该功能无效。用户未被删除。
    • 您是否尝试过删除python解释器中的关系的代码?如果它在那里被删除,则确保在调试模式下使用打印正确传递参数。
    • 感谢您的帮助。我最后做的只是使用另一个隐藏的输入,值={{match.id}},我在remove_relationship上使用了request.POST ...
    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2017-10-02
    • 2018-02-11
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多