【问题标题】:Can't pass object of model in arguments of django custom template filter无法在 django 自定义模板过滤器的参数中传递模型对象
【发布时间】:2016-02-29 09:46:06
【问题描述】:

我在 django 模板中创建了一个自定义过滤器,但是 django 在传递 no 时有一些限制。的参数,它只允许自定义过滤器函数Read more 的一个或两个参数。而且,我想将两个参数传递给我的自定义过滤器,一个是string,第二个是模型类的object。但无法成功完成此操作。

index.html

{% load has_permission_filter %}
{% for u in users %}
 <span class={{ user|has_location_perm:('user.view_user', u)}}>View</span>
{% endfor %}

在上述模板中,user 是当前登录用户,usersUser 模型类的实例列表。

has_permission_filter.py

def has_location_perm(user, args):
    perm_str, obj = args[0], args[1]
    // business logic
    if user.has_perm(perm_str) and business_logic_check(perm_str, obj):
        return 'allow'
    else:
        return 'not-allow'

所以,我想要某种解决方案,帮助我在 django 模板的过滤函数中传递 object

【问题讨论】:

  • 为什么要传入user,不就是检查用户u是否有权限吗?
  • 对我来说,您的 html 看起来有些混乱。 user 来自哪里(在您的 span 标签中)?
  • @cezar 我有编辑问题,请查看。

标签: python django django-templates django-template-filters


【解决方案1】:

您不能在过滤器中使用多个参数。不过,您可以使用simple tag

【讨论】:

  • 如果参数是模板变量,简单的标签函数会传递变量的当前值,而不是变量本身。那么我如何在我的函数中使用变量u 属性。
  • 简单标签可以正常工作。文档中的那句话意味着标签将传递给用户u,而不是字符串'u'。简单标签负责从模板上下文中获取 'u' 的值。
  • @sander-van-leeuwen 谢谢兄弟,这个解决方案真的很管用。
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 2014-03-16
  • 2014-02-13
  • 1970-01-01
  • 2017-10-03
  • 2011-06-18
  • 2011-05-28
  • 2011-09-13
相关资源
最近更新 更多