模板中带有参数的函数。姜戈

Posted

技术标签:

【中文标题】模板中带有参数的函数。姜戈【英文标题】:Function with arguments in a template. Django 【发布时间】:2012-10-25 09:19:17 【问题描述】:

在我的模板中,我显示了一个用户关注的用户列表。我希望用户能够通过一个按钮删除他关注的用户之一。 我有一个删除关系的函数 remove_relationship。

这是我的models.py中的函数:

  class UserProfile(models.Model):
  (...)

      def remove_relationship(self, person):
        Relationship.objects.filter(
            from_person=self, 
            to_person=person).delete()
        return

我想将此函数传递到我的模板中:

   % for user in following % 
   <form method="post">
    % csrf_token %
   <input type="submit" value="delete" onclick="remove_relationship"/>
   </form>
   %endfor%

问题是我无法在模板中传递参数。那么如何才能让每个按钮都删除与正确用户的关系呢?

我看到了关于这个主题的另一个问题,但它似乎不能解决我的问题(http://***.com/questions/1333189/django-template-system-calling-a-function-inside-模型)

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您似乎将客户端代码 (javascript) 与服务器端 (Django) 混淆了。

要获得提交的相关用户 ID,您可以在表单中添加一个额外的隐藏字段:

% for user in following % 
<form method="post" action="% url views.remove_relationship %">
 % csrf_token %
<input type="hidden" name="user_id" value=" user.id ">
<input type="submit" value="delete" />
</form>
%endfor%

然后根据您现在在request.POST['user_id'] 中找到的用户ID,创建一个在服务器端执行删除操作的remove_relationship 视图

【讨论】:

谢谢。当我按你说的做的时候,关系就按我的意思删除了。但它将用户重定向到“remove_relationship”视图。我希望用户留在同一页面上。你知道怎么做吗? 是的,只需从remove_relationship 视图返回一个HttpResponseRedirect(reverse('your original view here')) 或者,通过 Ajax 提交表单。但是你需要一些 Javascript 来发布它并从页面中删除现在删除的内容。 谢谢,但我收到此错误:“未找到带有参数 '()' 和关键字参数 '' 的 'myfile.html' 的反向。”我必须导入 'reverse' 我从 django.core.urlresolvers 导入反向使用。对吗? @JulietteDupuis 您需要使用视图名称,例如“views.myview”(即函数名称)而不是模板文件。

以上是关于模板中带有参数的函数。姜戈的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js:在 v-on:event 或 @event 中带有参数的匿名函数

对于js定时器中带有参数的回调函数没有延迟效果的解决方法

对于js定时器中带有参数的回调函数没有延迟效果的解决方法

如何将参数从我的表单操作传递到视图?姜戈

Scala中带和不带()的函数参数

Python中带参数的装饰器