向Django模板中的变量添加值
这是一个非常快速的问题,我认为这可能是模板中的一个限制 我使用| add:“num”功能向模板中的变量添加一个值,我尝试使用另一个变量作为数字,但它似乎不起作用。这可能吗 e、 g 谢谢大家向Django模板中的变量添加值,django,Django,这是一个非常快速的问题,我认为这可能是模板中的一个限制 我使用| add:“num”功能向模板中的变量添加一个值,我尝试使用另一个变量作为数字,但它似乎不起作用。这可能吗 e、 g 谢谢大家 韦恩你需要像这样的东西: {{ pagecontrol.start_page|sub:pagecontrol.new_per_page }} {{ pagecontrol.start_page|subtract:pagecontrol.news_per_page }} Django不提供用于执行减法的内
韦恩你需要像这样的东西:
{{ pagecontrol.start_page|sub:pagecontrol.new_per_page }}
{{ pagecontrol.start_page|subtract:pagecontrol.news_per_page }}
Django不提供用于执行减法的内置模板标记/过滤器。此外,没有用于将正整数转换为负整数的内置过滤器。您必须为此编写模板标记。 解决方案1-使用自定义模板过滤器:
@register.filter
def subtract(value, arg):
return value - arg
然后在模板中,您可以执行以下操作:
{{ pagecontrol.start_page|sub:pagecontrol.new_per_page }}
{{ pagecontrol.start_page|subtract:pagecontrol.news_per_page }}
解决方案2-使用库
可以使用Django mathfilters库获取减法过滤器
首先,在模板顶部加载mathfilters
。然后在模板中使用sub
过滤器,如下所示:
{% load mathfilters %}
{{ pagecontrol.start_page|sub:pagecontrol.news_per_page }}
为什么您的代码不起作用?
add
内置过滤器的Django源代码:
@register.filter(is_safe=False)
def add(value, arg):
"""Adds the arg to the value."""
try:
return int(value) + int(arg)
except (ValueError, TypeError):
try:
return value + arg
except Exception:
return ''
当您在模板中执行{{pagecontrol.start|page{add:“-pagecontrol.news_per_page”}
时,'-pagecontrol.news_per_page'
字符串作为arg
传递给上面的add
内置过滤器,而不是它的实际值,因此由于添加整数和字符串值而引发异常<代码>'作为最终值由add
过滤器返回,因此不显示任何内容
注意:
对于复杂变量名称,您可以将与
模板标记一起使用。它将以更简单的名称缓存复杂变量
下面是将与
一起使用添加
过滤器的示例。这将只添加值
{% with my_variable=pagecontrol.news_per_page %}
这将在变量my\u variable
中存储pagecontrol.news\u per\u page
的值。然后在模板中,可以使用以下变量:
{{ pagecontrol.start_page|add:my_variable }}
这将添加两个变量
{% with my_variable=pagecontrol.news_per_page %}
{{ pagecontrol.start_page|add:my_variable }}
{% endwith %}
你基本上不能。除了Rahul Gupta所说的之外,Django还有一个明确的设计理念来防止模板中的高级逻辑(尽管减法根本不是高级逻辑): 模板系统故意不允许以下情况:
- Assignment to variables
- Advanced logic
目标不是发明一种编程语言。目标是提供
只需要足够的编程功能,比如分支和
循环,这对于做出与演示文稿相关的决策至关重要
您可以根据Rahul发布的Django core
add
filter创建自己的用于减法的筛选器,或者在视图中执行任何减法操作。创建模板标记并使用该标记处理此类情况。抱歉@Rahul Gupta,这不起作用。{%with newsperpage=-pagecontrol.news\u per\u page%}