Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django模板中调用带参数的变量函数?_Django - Fatal编程技术网

如何在django模板中调用带参数的变量函数?

如何在django模板中调用带参数的变量函数?,django,Django,我想在Django模板中实现类似的功能 {{ variable.function(parameter) }} 其中,variable是通过上下文传递给模板的变量,在本例中为模型实例。 我尝试过不同的方法,但似乎没有一种有效。没有办法做到这一点。 您可以创建另一个变量并将其传递给上下文,以便使用它。 比如: 在你看来。 在模板中: {{result}这在Django模板中是不可能的:为了防止模板设计者射中自己的脚,这些模板被故意损坏。理由是模板中的唯一逻辑应该是表示逻辑,所有业务逻辑都应该保留在

我想在Django模板中实现类似的功能

{{ variable.function(parameter) }}
其中,
variable
是通过上下文传递给模板的变量,在本例中为模型实例。
我尝试过不同的方法,但似乎没有一种有效。

没有办法做到这一点。 您可以创建另一个变量并将其传递给上下文,以便使用它。 比如:

在你看来。 在模板中:
{{result}

这在Django模板中是不可能的:为了防止模板设计者射中自己的脚,这些模板被故意损坏。理由是模板中的唯一逻辑应该是表示逻辑,所有业务逻辑都应该保留在视图中。有些人认为这很公平,有些人认为这有点傲慢(那些愚蠢的模板设计者不够聪明,不能安全地使用函数和方法)

我可以想出三个选择:

  • 改用
  • 编写自定义模板过滤器
  • 在Django设计师认为应该保留的视图中保留所有逻辑
  • 我不会解释如何使用Jinja2,因为它是,而且如果您切换到Jinja2而不是本地Django模板,问题中的示例将一字不差地工作。这在Jinja2中非常有效:

    {{ variable.function(parameter) }}
    
    现在,模板过滤器解决方案:首先,您必须遵循一个。过滤器本身应该是这样的:

    # at your_tag_library.py
    @register.filter(name='call_with')
    def apply_callable(callable, arg):
        return callable(arg)
    
    然后在模板中,您可以执行以下操作:

    {% load your_tag_library %}
    
    {{ variable.function|call_with:parameter }}
    
    当然,最后一个选项来自Daniel的答案-在视图中预计算值,并在模板中显示结果:

    context['result'] = variable.function(parameter) 
    
    在模板中,您只需要
    {{result}}

    context['result'] = variable.function(parameter)