Выбор шаблона из ViewArg в Revel - PullRequest
       29

Выбор шаблона из ViewArg в Revel

0 голосов
/ 01 сентября 2018

С помощью инфраструктуры Revel можно ли выбрать шаблон на основе значения ViewArg?

Я определил базовый контроллер, который предоставляет метод для визуализации содержимого в views / Layout.html

type Controller struct {
    *revel.Controller
}

func(c *Controller) RenderView(view string, extraViewArgs ...interface{}) revel.Result {
    // ... omitted source
    c.ViewArgs["ContentTemplateName"] = view

    return c.RenderTemplate("layout.html")
}

Пример контроллера, реализующего это, выглядит следующим образом

type MyController struct {
    Controller
}

func (c MyController) Index() revel.Result {
    bananas := "This is bananas"
    return c.RenderView("App/Bananas.html", bananas)
}

Затем я пытаюсь отобразить «App / Bananas.html» в layout.html

{{set . "title" "Home"}}
{{template "header.html" .}}

<div class="container">
  <div class="row">
    {{template "flash.html" .}}
  </div>
  <!-- Left column of Content -->
  <div class="col-md-9 col-sm-8 col-xs-12">
    {{template .ContentTemplateName .}}
  </div>
  <!-- //Left Column of Content -->

  <!-- Right column of summary -->
  <div class="col-md-3 col-sm-4 hidden-xs">
    <div class="container">
      {{template "sidebar.html" .}}
    </div>
  </div>
  <!-- //Right column of summary -->
</div>

{{template "footer.html" .}}

Выводит следующий результат

ERROR 2018/08/31 17:46:10 template.go:338: Template compilation error (In layout.html around line 10):
unexpected ".ContentTe"... in template clause
ERROR 2018/08/31 17:46:10 server.go:99: Template Compilation Error (in layout.html:10): unexpected ".ContentTe"... in template clause

1 Ответ

0 голосов
/ 03 октября 2018

На основании комментария @ mh-cbon было обнаружено, что невозможно использовать переменную в качестве входных данных для функции template .

Чтобы обойти эту проблему, чтобы приблизиться к нужным функциям, я реализовал следующее (не идеальное) решение:

base_content_view.html

{{template "begin_content.html" . }}
  <!-- content here -->
{{template "end_content.html" . }}

begin_content.html

{{template "header.html" . }}

<div class="container">
  <div class="row">
    {{template "flash.html" .}}
  </div>
    <!-- Left column of Content -->
  <div class="col-md-9 col-sm-8 col-xs-12">    

end_content.html

  </div>
  <!-- //Left Column of Content -->

  <!-- Right column of summary -->
  <div class="col-md-3 col-sm-4 hidden-xs">
    <div class="container">
      {{template "sidebar.html" .}}
    </div>
  </div>
  <!-- //Right column of summary -->

{{template "footer.html" .}}

base_content_view.html - это статический файл, который копируется и вставляется в качестве шаблона при создании новых представлений. Этот дизайн открывает другие проблемы, однако служит примером обходного пути ограничения функции template.

...