在我正在开发的项目管理应用程序中,如果您是票证的所有者(即创建者)和/或票证所属项目的管理员,则应该可以编辑/删除票证。
在显示项目的模板中,我想使用自定义过滤器来确定这一点,如下所示:
{% 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)
那么,我如何提供两个参数?否则自定义过滤器是否正确?
提前致谢!
最佳答案
您无法将多个参数传递给模板过滤器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
(编辑:另外,过滤器代码中的 bool 值应该大写)
关于django - 自定义过滤器 - 需要两个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168117/