定制过滤器 - 需要两个参数 [英] custom filter - needs two arguments
问题描述
在显示项目的模板中,我想使用自定义过滤器来确定这一点,如下所示:
{%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屋!