#perl #templates #param #cgi-application #perl-html-template
#perl #шаблоны #параметр #cgi-приложение #perl-html-template
Вопрос:
У меня есть фрагмент кода, который использует CGI::Application
в качестве основы, но что-то работает неправильно.
Когда я пытаюсь что-то установить через $Template->param()
, это, похоже, не устанавливается. $Template
равно $self->load_tmpl($template);
И часть, которую я хочу сохранить, это:
$Template->param('symbols' => %a_hash_ref);
Я знаю, что %a_hash_ref
содержит ожидаемое значение. Он имеет похожую форму:
{'symbol' => 'DTX'},{'symbol' => 'QFLD'}
Кроме того, если я сделаю
$Template->param('Hey!xD' => 'Something');
это не сохраняет, но
$Template->param($Pagination);
делает, где $Pagination
также является hash_ref .
Я знаю, что все значения такие, какими они должны быть, и я также попробовал это с несколькими простыми строками, которые должны работать, но они не установлены. Я знаю это, потому что, когда я запускаю:
my @params = $Template->param();
die Dumper @params;
он выводит все переменные, которые он должен был установить, но ожидаемые (включая 'Hey!xD'
строку) отсутствуют. Я также знаю, что на самом деле он запускает код, потому что этот файл сброса появляется после того, как я пытаюсь установить значения.
Файл шаблона содержит этот фрагмент кода:
$(документ).готово(функция () { mainFunction(‘[%symbol%]’); });
Буду признателен за любую помощь.
Редактировать:
Это то, что присваивается параметру:
[ { ‘date’ => ‘2006-07-05’, ‘avg_gain’ => undef, ‘bollinger_mid’ => ‘32.80000’, ‘symbol’ => ‘BBQ’ }, { ‘date’ => ‘2006-04-04’, ‘avg_gain’ => undef, ‘bollinger_mid’ => ‘34.55656’, ‘symbol’ => ‘AAPL’ } … ]
Ответ №1:
На самом деле это проблема с HTML:: Template, который CGI:: Application использует по умолчанию для создания шаблонов.
Возможно, вы die_on_bad_params
установили значение 0 в своем load_tmpl
вызове? HTML::Template по умолчанию должен умереть, если вы попытаетесь установить параметр, которого нет в загруженном шаблоне (документы здесь). Когда die_on_bad_params
отключен, вы получите описываемое вами поведение, при котором неизвестный параметр шаблона игнорируется и отбрасывается.
Кроме того, согласно документам, TMPL_LOOP
принимает arrayref хэш-ссылок в качестве param
аргумента. Возможно, это помогло бы передать ваш параметр «symbols» следующим образом:
my $symbols = [{ symbol => 'DTX' },{ symbol => 'QFLD' }];
$Template->param(symbols => $symbols);
Если вы опубликуете образец шаблона и небольшой скрипт, который показывает ошибку, будет легче определить наверняка.
Комментарии:
1. Да, у меня установлено значение 0! Спасибо! Если он исчезнет, когда я попытаюсь установить параметр, который еще не существует в шаблоне, как я могу тогда установить этот параметр? Я прочитал документы и не понимаю, почему $Template-> param(‘symbols’) не существует. В моем шаблоне у меня есть это: <ИМЯ TMPL_LOOP = «symbols» > fetchQuoteData(‘[%symbol%]’); < /TMPL_LOOP>
2. Привет, я добавил некоторую
TMPL_LOOP
информацию из документов, которая может помочь.3. Конечно, большое вам спасибо за вашу помощь. По-видимому, я отправляю arrayref из hashrefs. Я добавлю код в качестве редактирования
4. Ошибка заключалась в том, что у меня были пробелы между < и TMPL_LOOP , поэтому он не обработал это. В любом случае спасибо! Ты потрясающий 😉
5. Рад, что теперь это работает. Я никогда не использовал HTML::Template, но это кажется действительно сложным. Я знаю, что не очень полезно рекомендовать другие пакеты / фреймворки, когда вы уже вложили средства, но рассматривали ли вы возможность использования Template:: Toolkit ? Это проверенная и гибкая система шаблонов, которой я часто пользовался. Также есть плагин для CGI:: App (CGI::Application::Plugin::TT).