https://i.imgur.com/FBPqS8B.png
Сегодня я принёс вам упражнение для разминки. Попробуем сымитировать что-то подобное реактовским компонентам на питоне. Без использования транспилера. Да, синтаксис будет не html/xml-ный, зато без транспилера — чистый питон. И чтобы всё динамически — ни о каких тегах и атрибутах рендерер не знает, можно использовать любые (то, что class_
отрендерился в class
— просто strip´аем андерскоры, если есть, костыль, чтобы использовать зарезервированные слова).
Контекст реализовывать не нужно (я про подстановку переменных из инстанса компонента в шаблон при рендере, в моём примере компонент вообще инстанцировать не надо), там ничего интересного.
Усложнённый вариант — сделать из el1(attr1='value1')['text1', el2(attr2='value2'), 'text2']
такое: el1[attr1:'value1', 'text1', el2[attr2:'value2'], 'text2']
. Обращаю внимание, имена атрибутов записаны БЕЗ кавычек.
Очень хотелось бы увидеть решение от маньки, например. Он ведь такой наскилованный чувак, не так ли?
Сорь за код картинкой, лень аплодить + так наглядней ввод и вывод.
А может, нахуй пойдешь?
@postman Это что же, жсблядь закукарекала? :D Иди, наверни ещё 23 новых плагина для бэйбла.
@4077 lmao
Ну и, собственно, усложнённый вариант: https://i.imgur.com/vEgnbpa.png
Обратите внимание на дата-атрибут (
data-some-value
).тут не хватает препроцессора PSX, лол
@anonymous Не, ни
value
, ниdata-some-value
в этом случае не будут работать (ну ты понимаешь почему, ага). Если хочется именно так, придётся записать атрибуты строками:'href':href, 'data-some-value':value
.Предполагается, что внутри рендер-метода ты не будешь юзать локальные переменные, переменные контекста/инстанса компонента доступны через отдельный объект (типа реактовского
props
), то есть как-то так:(props — атрибуты инстанса компонента (как-нибудь так, например,
instance = MyComponent(href='https://bnw.im', ...)
, ctx — дополнительный контекст, типа rendered = instance.render(context={'value': 'foo'}))@anarchy > здесь кукаретников не уважают
Охуенно обобщил за весь бнв, спасибо!
Прочитал как «я говнокодер-копипастер-стэковерфлоу, я не привык/не умею думать, поэтому, чтобы скрыть своё припекание из-за того факта, что я не могу решить эту теоретическую (не практическую) задачку (чисто на умение искать нестандартные решения/знание тонкостей языка), я огрызнусь и отправлю автора куда подальше».
@anarchy Да ради б-га. Крысиным королём при этом остаёшься ты, не я.
http://pasterack.org/pastes/83741
```
lang racket
(require scribble/html/html)
(require scribble/html/xml)
(define my-component%
(class object%
(super-new)
(send (new my-component%) render)
```