Танцор плагин загружает шаблон - PullRequest
2 голосов
/ 08 сентября 2011

Как я могу загрузить шаблон из Dancer :: Plugin, который не находится в каталоге 'app / views', не меняя каталог по умолчанию для views?

Это не работает / он добавляет путь к представлениям по умолчанию впуть к файлу /:

package Dancer::Plugin::MyPlugin;
use Dancer ':syntax';
use Dancer::Plugin;

any '/test' => sub {
    template '/path_to_template/test.tt' => {
    };
};

register_plugin;

1;

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Вы можете вызвать engine, чтобы получить объект Dancer::Template и вызвать его метод render, например:

my $template_engine = engine 'template';
my $content = $template_engine->render('/path/to/template.tt', { 'name' => 'value' });

Затем, чтобы вернуть отображаемый контент в макете по умолчанию, вызовите apply_layout:

return $template_engine->apply_layout($content);
3 голосов
/ 08 сентября 2011

В настоящее время, я думаю, вам нужно установить параметр views перед вызовом шаблона, а затем изменить его обратно, например:

my $views_dir = setting('views');       # remember current setting
setting 'views' => '/some/other/path';  # temporarily use our desired path
my $content = template 'test', $params; # render the view
setting 'views' => $views_dir;          # restore previous setting
return $content;

Это, однако, уродливо.

Я думаю, было бы целесообразно, чтобы ключевое слово template принимало параметр system_path, так же как и send_file, так что вы могли бы сказать, например ::

template '/path/to/view.tt', $params, { system_path => 1 };

Я поднял проблему для этого и постараюсь реализовать ее в следующем выпуске: https://github.com/sukria/Dancer/issues/645

(Раскрытие информации: я являюсь частью команды разработчиков Dancer)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...