定制过滤器 - 需要两个参数 [英] custom filter - needs two arguments

查看:113
本文介绍了定制过滤器 - 需要两个参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

  {%if ticket | owner_or_admin:user%} 
< p>
< a href ={%url ticket_edit project.id%}>编辑< / a>
< a id =delete_linkhref ={%url ticket_delete ticket.id%}>删除< / a>
< / p>
{%endif%}

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

  @ register.filter(name ='owner_or_admin') 
def所有权(票证,项目,用户):
如果ticket.user == user:
return true;
else:
如果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)

那么如何提供两个参数?



提前感谢!

解决方案

您不能将多个参数传递给模板过滤器根据文档,但您可以使用两个过滤器。



模板:

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

过滤器:

  @ register.filter(name ='owner')
def所有权(ticket,user):
return ticket.user == user

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

(编辑:此外,您的过滤器代码中的布尔应大写)


In the project manage app I'm working on it should be possible to edit/delete a ticket if you are the owner of (i.e. the creator of) the ticket and/or the admin of the project the ticket belongs to.

In the template for showing a project I want to use a custom filter to determine this, used as seen here:

{% 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 %}

Below is a try of creating this custom filter, but this throws an error ('owner_or_admin requires 2 arguments, 1 provided'):

@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

models:

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

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

So, how do I provide two arguments? Is the custom filter correct otherwise?

Thanks in advance!

解决方案

You can't pass multiple arguments to a template filter according to the docs, but you could use two filters instead.

Template:

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

Filters:

@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

(EDIT: also, your booleans in the filter code should be capitalized)

这篇关于定制过滤器 - 需要两个参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆