#todayilearned

by @jm3 · aka John Manoogian3

Frequent, bite-size mini-milestone updates as I fast-forward merge* my front-end web development skills up to 2019 levels. Learn more

BASEOF in Hugo templating

Posted at — Jun 25, 2019

Hugo allows you to define a single, confusingly named master “baseof” template which site templates can override or populate portions of, a feature Hugo calls blocks. This is incredibly useful, and should be required in every modern web templating framework.

Today, I rewrite my simple hugo theme used on this site to use baseof, in order to embed the most recent Git SHA of the content in a meta tag.

Before Rails, certain paradigms of web templating were difficult because it was often necessary to calculate some piece of data at the end of a list in the middle of the page, say, which would then need to be included at the top of the DOM which had already been calculated by some previous, upstream component.

If you’ve written Rails view code, or used Blade templating with PHP / Laravel, then you already know this concept: Ruby + Rails introduced it first, which wasn’t surprisingly given Ruby’s deep love of blocks, procs, and lambda (anonymous functions). It’s a huge win, and once you start working with blocks and yields, you’ll wonder how you ever lived without them.

I’d be surprised if any respectable web templating solution didn’t support some form of out-of-order, :yield-like feature. (Blade templates in PHP use the term blocks and sections)

Learn more about blocks in Ruby: