Ставим фреймворк:
# apt-get install libdancer-perlСоздаём каркас будущего приложения под названием test:
$ dancer -a testТеперь можно перейти в каталог test/bin и запустить оттуда приложение app.pl:
$ cd test/bin $ ./app.plЗапустится только что созданное приложение test, которое будет ожидать подключений на TCP-порту 3000. Можно открыть в браузере ссылку http://localhost:3000 и увидеть тестовую страницу:
Как вы уже догадались по заголовку заметки, необычное в этом снимке экрана только одно - строчка "Template engine: html_template".
По умолчанию в Dancer'е используется некий "простой" шаблонизатор simple. В качестве альтернативы предлагается использовать template_toolkit, я же хочу воспользоваться html_template, который по сегодняшним временам кому-то может показаться довольно "дубовым".
К сожалению, в репозитории Debian этого модуля нет. Поэтому поставим сначала пакет dh-make-perl:
# apt-get install dh-make-perlТеперь с его помощью поставим нужный нам Perl-модуль Dancer::Template::HtmlTemplate, соглашаясь при первом запуске на все умолчальные настройки:
# dh-make-perl --install --cpan Dancer::Template::HtmlTemplateТеперь укажем Dancer'у, что мы хотим использовать этот шаблонизатор в нашем приложении. Для этого закомментируем в файле настроек config.yml в каталоге проекта строчку шаблонизатора simple и добавим строчку с шаблонизатором html_template:
#template: "simple" template: "html_template"Теперь самое время отредактировать шаблоны в соответствии с правилами выбранного нами шаблонизатора - заменим все строчки типа "<% var %>" на строчки типа "<TMPL_VAR NAME="var">". Шаблоны находятся в каталоге views проекта и имена их файлов оканчиваются расширением ".tt".
Теперь можно снова запустить наше тестовое веб-приложение и увидеть ту самую страницу, снимок которой я привёл выше.
Если заглянуть в исходный текст модуля, то можно увидеть, что опции HTML::Template, используемые при загрузке шаблона, можно настроить всё в том же файле настройки config.yml:
my $ht = HTML::Template->new( filename => $template, die_on_bad_params => 0, # Required, as we pass through other params too %{$self->config} );Я использую настройки utf8 и loop_context_vars. Их я и пропишу в файл config.yml:
engines: html_template: utf8: 1 loop_context_vars: 1Теперь создадим в каталоге views шаблон страницы hello, поместив в файл hello.tt следующий текст:
<h3 align="center"> <TMPL_VAR NAME="name"> </h3>И откроем файл test.pm в каталоге lib, допишем в него обработчик страницы hello:
get '/hello/:name' => sub { template 'hello', { name => param('name') }; };Теперь перейдём по ссылке "http://localhost:3000/hello/превед" и увидим следующее:
Страница создана на основе макета, лежащего в файле views/layouts/main.tt и созданного нами шаблона view/hello.tt. Если захочется поменять что-то в макете - можно отредактировать его, можно создать новый макет и положить его рядом. Выбрать используемый макет можно прямо в обработчике. В документации приведены два примера.
Отключение макета на определённой странице:
get '/' => sub { template 'index', {}, { layout => undef }; };Или использование указанного макета:
get '/user' => sub { template 'user', {}, { layout => 'user' }; };На этом пока всё.
4 комментария:
вопрос по
engines:
html_template:
utf8: 1
loop_context_vars: 1
сделал такие же настройки как у вас, и работает также, но стоит мне в файле шаблона, что-либо написать на русском, то это слово отображается аброкадаброй, то что передаю в строке браузера, отображается нормально, как с этим бороться не подскажите?
Во-первых, стоит убедиться в том, что в файле шаблона используется кодировка UTF-8.
Во-вторых, стоит проверить раздел head в HTML-файле, возможно стоит указать там тег, задающий кодировку страницы:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
или исправить кодировку, если такой тег там уже есть и в нём указана другая кодировка.
Если Вы используете кодировку не UTF-8, тогда этот флаг можно отключить и выставить нужную кодировку в файле шаблона и в переменных окружения скрипта. Однако, я не рекомендую использовать кодировку, отличную от UTF-8. Эта кодировка - стандарт, большинство разработчиков ориентируются на её использование и поэтому именно при её использовании гораздо ниже шанс нарваться на какие-то недоработки различных программ.
это все сделано правильно, я не нашел способ как это вылечить, но нашел как обойти.
Передаю русский текст из perl файла шаблону, и в таком случае все нормально. А учитывая что все-равно планировал использовать словари для поддержки мультиязычности, то так и буду делать.
P.S. на ваш сайт постоянно ругается avast, что вирусная угроза обнаружена.
Здравствуйте, а как быть если генерируются множество страниц по шаблону, например есть шаблон страницы /templates/page.html из него должны создаваться страницы page_1.html, page_2.html, ... , page_last.html (это реализовано), но все эти страницы имеют один и тот же title, description, h1 (которые прописаны в шаблоне), а надо чтоб в соответствующих страницах было "title_1", "descriptions_1", "h1_1" "title_2", "descriptions_2", "h1_1" и тд? Устала искать информацию.
Отправить комментарий