From 8b0c381808c7fcef80c81b4bb169833b208f0823 Mon Sep 17 00:00:00 2001 From: corebreaker Date: Fri, 21 Jul 2017 16:46:51 +0300 Subject: [PATCH 1/3] Resolve {%extends%} & {%include%} tags problem Former-commit-id: 2f52b831993832cc8c7dd4e7aff55848b3266e0a --- view/django.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/view/django.go b/view/django.go index 93cfca45..efe55249 100644 --- a/view/django.go +++ b/view/django.go @@ -1,10 +1,12 @@ package view import ( + "bytes" "fmt" "io" "io/ioutil" "os" + stdPath "path" "path/filepath" "strings" "sync" @@ -22,6 +24,35 @@ type ( FilterFunction func(in *Value, param *Value) (out *Value, err *Error) ) +type tDjangoAssetLoader struct { + baseDir string + assetGet func(name string) ([]byte, error) +} + +// Abs calculates the path to a given template. Whenever a path must be resolved +// due to an import from another template, the base equals the parent template's path. +func (dal *tDjangoAssetLoader) Abs(base, name string) string { + if stdPath.IsAbs(name) { + return name + } + + return stdPath.Join(dal.baseDir, name) +} + +// Get returns an io.Reader where the template's content can be read from. +func (dal *tDjangoAssetLoader) Get(path string) (io.Reader, error) { + if stdPath.IsAbs(path) { + path = path[1:] + } + + res, err := dal.assetGet(path) + if err { + return nil, err + } + + return bytes.NewBuffer(res), nil +} + // DjangoEngine contains the amber view engine structure. type DjangoEngine struct { // files configuration From 977749082249002cf68f1f22a587b4dd5de086e4 Mon Sep 17 00:00:00 2001 From: corebreaker Date: Fri, 21 Jul 2017 17:00:36 +0300 Subject: [PATCH 2/3] Apply new template loader Former-commit-id: f28eab261ea1ac93774e04240c7e6da663e0da7c --- view/django.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/view/django.go b/view/django.go index efe55249..f938ef97 100644 --- a/view/django.go +++ b/view/django.go @@ -230,12 +230,8 @@ func (s *DjangoEngine) loadAssets() error { virtualDirectory, virtualExtension := s.directory, s.extension assetFn, namesFn := s.assetFn, s.namesFn - var templateErr error - /*fsLoader, err := pongo2.NewLocalFileSystemLoader(virtualDirectory) - if err != nil { - return err - }*/ - set := pongo2.NewSet("", pongo2.DefaultLoader) + // Make a file set with a template loader based on asset function + set := pongo2.NewSet("", &tDjangoAssetLoader{baseDir: s.directory, assetGet: s.assetFn}) set.Globals = getPongoContext(s.globals) // set the filters @@ -256,6 +252,8 @@ func (s *DjangoEngine) loadAssets() error { s.mu.Lock() defer s.mu.Unlock() + var templateErr error + names := namesFn() for _, path := range names { if !strings.HasPrefix(path, virtualDirectory) { From d379e753b635dd23395262a81a88b546a7405bc4 Mon Sep 17 00:00:00 2001 From: corebreaker Date: Fri, 21 Jul 2017 17:15:04 +0300 Subject: [PATCH 3/3] Stash cancel Former-commit-id: 6ad957ee4c34ad2f4df065a84d127bef5c87da99 --- view/django.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/django.go b/view/django.go index f938ef97..d0f74d71 100644 --- a/view/django.go +++ b/view/django.go @@ -46,7 +46,7 @@ func (dal *tDjangoAssetLoader) Get(path string) (io.Reader, error) { } res, err := dal.assetGet(path) - if err { + if err != nil { return nil, err }