代码之家  ›  专栏  ›  技术社区  ›  Alex

Django的方法是什么?

  •  1
  • Alex  · 技术社区  · 14 年前
    class Article(models.Model):
        def user_may_see_full_version(self, user):
            # do something very sophisticated with the user
            return [True/False whatever]
    

    {% for article in articles %}
        {% if article.user_may_see_full_version request.user %}{{ article }}{% else %}{{article.title }}{% endif %}
    {% endfor %}
    

    但这不起作用,因为我无法将参数传递给方法。。。

    有什么好办法解决这个问题吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ned Batchelder    14 年前

    无法直接从模板将参数传递给方法。模板过滤器是最好的方法:

    {% if article|user_may_see_full_version:user %}{{ article }}{% else %}{{article.title }}{% endif %}
    

    过滤器的实现方式如下:

    @register.filter()
    def user_may_see_full_version(article, user):
        return article.user_may_see_full_version(user)
    
        2
  •  1
  •   maraujop    14 年前

    Jinja2 . 但是这样你就会失去Django模板提供的一些很酷的东西。

    因此,最好的选择是在视图中生成该变量并将其传递给模板。因此,如果呈现模板的视图传递了一个文章列表,其中每个人都有一个名为user\u的变量可能会看到\u full\u版本,那么您只需执行以下操作:

    {% if article.user_may_see_full_version %} whatever
    

    专注于处理您视图中的逻辑。模板只是呈现传递的信息的一种方式。