【问题标题】:custom filter - needs two arguments自定义过滤器 - 需要两个参数
【发布时间】:2013-02-16 13:36:45
【问题描述】:

在我正在开发的项目管理应用程序中,如果您是票证的所有者(即创建者)和/或票证所属项目的管理员,则应该可以编辑/删除票证。

在显示项目的模板中,我想使用自定义过滤器来确定这一点,如下所示:

{% if ticket|owner_or_admin:user %}
    <p>
        <a href="{% url ticket_edit project.id %}">Edit</a>
        <a id="delete_link" href="{% url ticket_delete ticket.id %}">Delete</a>
    </p>
{% endif %}

以下是创建此自定义过滤器的尝试,但这会引发错误('owner_or_admin 需要 2 个参数,提供 1 个参数'):

@register.filter(name='owner_or_admin')
def ownership(ticket, project, user):
    if ticket.user == user:
        return true;    
    else:
        if project.added_by_user == user:
            return true
    return false

型号:

class Project(models.Model):
    ... fields ...
    added_by_user = models.ForeignKey(User)

class Ticket(models.Model):
    ... fields ...
    user = models.ForeignKey(User)

那么,我如何提供两个参数?否则自定义过滤器是否正确?

提前致谢!

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    您不能将多个参数传递给模板过滤器according to the docs,但您可以使用两个过滤器。

    模板:

    {% if ticket|owner:user or project|admin:user %}
        <!-- blah -->
    {% endif %}
    

    过滤器:

    @register.filter(name='owner')
    def ownership(ticket, user):
        return ticket.user == user
    
    @register.filter(name='admin')
    def adminship(project, user):
        return project.added_by_user == user
    

    (编辑:另外,过滤器代码中的布尔值应该大写)

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 1970-01-01
      • 2011-06-10
      • 2011-02-10
      • 1970-01-01
      • 2017-08-15
      • 2012-09-03
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多