内置测试器 'define' 未按预期工作
Built-in tester 'define' not working as I expected
我有一个模板,其中有一个部分应该在定义变量时呈现。但我无法让它发挥作用。我的项目中有这样的东西:
use serde::Serialize;
#[derive(Default,Serialize)]
struct AStruct {
parameter: Option<String>
}
// AStruct { parameter: None }
let a_struct_instance = AStruct {..Default::default()};
TEMPLATES.render("template.conf", &a_struct_instance) {...}
// template.conf example:
//
// {% if parameter is defined %}
// SOMETHING TO SHOW
// {% endif %}
如果定义了参数,模板的呈现方式就像这样,这是为什么?
参数字段是None,但是在内置测试器函数中,'value'是Some(Null)和is_some() return true on this .
https://github.com/Keats/tera/blob/master/src/builtins/testers.rs#L36
/// Returns true if `value` is defined. Otherwise, returns false.
pub fn defined(value: Option<Value>, params: Vec<Value>) -> Result<bool> {
number_args_allowed("defined", 0, params.len())?;
Ok(value.is_some())
}
我做错了什么?
好吧,我的问题是测试人员 'is defined' 或 'is undefined' 检查变量是否为 defined/undef,而不是变量的值。
我有一个模板,其中有一个部分应该在定义变量时呈现。但我无法让它发挥作用。我的项目中有这样的东西:
use serde::Serialize;
#[derive(Default,Serialize)]
struct AStruct {
parameter: Option<String>
}
// AStruct { parameter: None }
let a_struct_instance = AStruct {..Default::default()};
TEMPLATES.render("template.conf", &a_struct_instance) {...}
// template.conf example:
//
// {% if parameter is defined %}
// SOMETHING TO SHOW
// {% endif %}
如果定义了参数,模板的呈现方式就像这样,这是为什么?
参数字段是None,但是在内置测试器函数中,'value'是Some(Null)和is_some() return true on this .
https://github.com/Keats/tera/blob/master/src/builtins/testers.rs#L36
/// Returns true if `value` is defined. Otherwise, returns false.
pub fn defined(value: Option<Value>, params: Vec<Value>) -> Result<bool> {
number_args_allowed("defined", 0, params.len())?;
Ok(value.is_some())
}
我做错了什么?
好吧,我的问题是测试人员 'is defined' 或 'is undefined' 检查变量是否为 defined/undef,而不是变量的值。