django - 自定义过滤器 - 需要两个参数

标签 django django-models django-templates

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

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

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

相关文章:

python - 如何追踪这个?属性错误 : 'NoneType' object has no attribute 'is_relation' during makemigrations

django - 在 django 1.3 中使用和引用 slugfield 的正确方法是什么

django - 在 Heroku 中创建一个新目录

django - 修改查询集结果

django - 我是否在 django 中以错误的方式重写了模型上的保存方法?

Django buggy 模板标签 - 'NoneType' 对象没有属性 'source'

django - Google map 无法在 App Engine 开发服务器上的 Django 模板中运行

Python + Django 页面重定向

python - Django 生成测试数据非常慢

python - django 中的 Slug 字段错误