aboutsummaryrefslogtreecommitdiffstats
path: root/askama_derive
diff options
context:
space:
mode:
Diffstat (limited to 'askama_derive')
-rw-r--r--askama_derive/src/generator.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs
index 67ec2c2..6c02a26 100644
--- a/askama_derive/src/generator.rs
+++ b/askama_derive/src/generator.rs
@@ -467,11 +467,17 @@ impl<'a> Generator<'a> {
let expr_code = self.visit_expr_root(iter);
self.write_buf_writable(buf);
- buf.write("for (_loop_index, ");
+ buf.write("for (_loop_index, _loop_last, ");
self.visit_target(buf, var);
match iter {
- Expr::Range(_, _, _) => buf.writeln(&format!(") in ({}).enumerate() {{", expr_code)),
- _ => buf.writeln(&format!(") in (&{}).into_iter().enumerate() {{", expr_code)),
+ Expr::Range(_, _, _) => buf.writeln(&format!(
+ ") in ::askama::helpers::enumerate({}) {{",
+ expr_code
+ )),
+ _ => buf.writeln(&format!(
+ ") in ::askama::helpers::enumerate((&{}).into_iter()) {{",
+ expr_code
+ )),
};
self.handle(ctx, body, buf, AstLevel::Nested);
@@ -915,6 +921,9 @@ impl<'a> Generator<'a> {
} else if attr == "first" {
buf.write("(_loop_index == 0)");
return DisplayWrap::Unwrapped;
+ } else if attr == "last" {
+ buf.write("_loop_last");
+ return DisplayWrap::Unwrapped;
} else {
panic!("unknown loop variable");
}