Merge branch 'master' into errors-logs-improvements
This commit is contained in:
@@ -3,20 +3,22 @@ import PathKit
|
||||
|
||||
class IncludeNode : NodeType {
|
||||
let templateName: Variable
|
||||
let includeContext: String?
|
||||
let token: Token?
|
||||
|
||||
class func parse(_ parser: TokenParser, token: Token) throws -> NodeType {
|
||||
let bits = token.components()
|
||||
|
||||
guard bits.count == 2 else {
|
||||
throw TemplateSyntaxError("'include' tag takes one argument, the template file to be included")
|
||||
guard bits.count == 2 || bits.count == 3 else {
|
||||
throw TemplateSyntaxError("'include' tag requires one argument, the template file to be included. A second optional argument can be used to specify the context that will be passed to the included file")
|
||||
}
|
||||
|
||||
return IncludeNode(templateName: Variable(bits[1]), token: token)
|
||||
return IncludeNode(templateName: Variable(bits[1]), includeContext: bits.count == 3 ? bits[2] : nil, token: token)
|
||||
}
|
||||
|
||||
init(templateName: Variable, token: Token) {
|
||||
init(templateName: Variable, includeContext: String? = nil, token: Token) {
|
||||
self.templateName = templateName
|
||||
self.includeContext = includeContext
|
||||
self.token = token
|
||||
}
|
||||
|
||||
@@ -28,7 +30,8 @@ class IncludeNode : NodeType {
|
||||
let template = try context.environment.loadTemplate(name: templateName)
|
||||
|
||||
do {
|
||||
return try context.push {
|
||||
let subContext = includeContext.flatMap { context[$0] as? [String: Any] }
|
||||
return try context.push(dictionary: subContext) {
|
||||
return try template.render(context)
|
||||
}
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user