diff options
Diffstat (limited to '')
-rw-r--r-- | askama_derive/src/generator.rs | 6 | ||||
-rw-r--r-- | testing/templates/precedence-for.html | 3 | ||||
-rw-r--r-- | testing/tests/loops.rs | 14 |
3 files changed, 20 insertions, 3 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index 5a136fb..d0ac030 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -747,14 +747,14 @@ impl<'a> Generator<'a> { fn visit_attr(&mut self, buf: &mut Buffer, obj: &Expr, attr: &str) -> DisplayWrap { if let Expr::Var(name) = *obj { if name == "loop" { - buf.write("_loop_index"); if attr == "index" { - buf.write(" + 1"); + buf.write("_loop_index + 1"); return DisplayWrap::Unwrapped; } else if attr == "index0" { + buf.write("_loop_index"); return DisplayWrap::Unwrapped; } else if attr == "first" { - buf.write(" == 0"); + buf.write("(_loop_index == 0)"); return DisplayWrap::Unwrapped; } else { panic!("unknown loop variable"); diff --git a/testing/templates/precedence-for.html b/testing/templates/precedence-for.html new file mode 100644 index 0000000..e5f7e8b --- /dev/null +++ b/testing/templates/precedence-for.html @@ -0,0 +1,3 @@ +{% for s in strings %} + {{- loop.index0 }}. {{ s }}{% if !loop.first %}{% else %} (first){% endif %} +{% endfor %} diff --git a/testing/tests/loops.rs b/testing/tests/loops.rs index ac19d43..6c2f35d 100644 --- a/testing/tests/loops.rs +++ b/testing/tests/loops.rs @@ -32,3 +32,17 @@ fn test_nested_for() { }; assert_eq!(s.render().unwrap(), "1\n 0a1b2c2\n 0one1two"); } + +#[derive(Template)] +#[template(path = "precedence-for.html")] +struct PrecedenceTemplate<'a> { + strings: Vec<&'a str>, +} + +#[test] +fn test_precedence_for() { + let s = PrecedenceTemplate { + strings: vec!["A", "alfa", "1"], + }; + assert_eq!(s.render().unwrap(), "0. A (first)\n1. alfa\n2. 1\n"); +} |