Хобрук: Ваш путь к мастерству в программировании

Как вывести данные из переменных Yaml (написанных в уценке) в файл HTML Haml?

В файле данных Yaml aaa.yml у меня есть:

yyy: |
     [foo](http://example.com) bar.

Я хочу получить эти данные из файла Haml (zzz.html.haml).

1. Если я сделаю zzz.html.haml:

    %p
      = data.aaa.yyy
  • Миддлмен рендерит zzz.html:

    <p> [foo](http://example.com) bar</p>

2. Если я сделаю:

    %p
      :markdown
        = data.aaa.yyy
  • Миддлмен делает:

    <p>= data.aaa.yyy</p>

Как сделать так, чтобы это отображалось:

<p><a href="http://example.com">foo</a> bar</p>

?


Ответы:


1

У вас есть строка, содержащая уценку, и вы хотите отобразить эту уценку и включить результат в свой вывод.

Один из способов — использовать фильтр Haml :markdown. Вы не можете использовать обычный синтаксис Haml внутри фильтра (как вы пытались), но вы можете использовать интерполяцию внутри #{...}, так что вы можете сделать

:markdown
  #{data.aaa.yyy}

Лучший способ, если строка представляет собой отдельный фрагмент, может состоять в том, чтобы создать вспомогательный метод, который отображает уценку, и вызвать его.

Везде, где у вас есть помощники, добавьте что-то вроде:

def markdown s
  # I'm using kramdown here, but you can use whatever processor you prefer.
  Kramdown::Document.new(s).to_html
end

Затем в вашем Haml:

= markdown(data.aaa.yyy)
17.05.2017

2

Ура! Оказывается, есть этот помощник, который уже был в моем config.rb, но сам по себе не работал:

def markdown(text)
  Tilt['markdown'].new { text }.render
end

Когда я установил этот помощник (из @matt answer) с первым:

def markdown s
  Kramdown::Document.new(s).to_html
end

Затем сработало = markdown(foo.bar), что сделало мой день!! :D

18.05.2017
  • Этот второй помощник никоим образом не ссылается на первый. Я не знаю, почему первый не сработал (у меня работает), но причина, по которой добавление второго работает, заключается в том, что он перезаписывает определение markdown, а первый вообще не используется. Вы можете удалить первый помощник, и ничего не изменится. 10.08.2017
  • И если кто-то хочет использовать первый хелпер, нужно добавить контекст приложения, чтобы он работал полноценно во всех случаях. См. этот ответ. 10.08.2017
  • Новые материалы

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..