Bird
Raised Fist0
Flaskframework

Macros for reusable components in Flask - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a macro in Flask's Jinja2 templates?
A macro is a reusable block of template code in Jinja2 that you can define once and use multiple times to avoid repetition.
Click to reveal answer
beginner
How do you define a macro in a Jinja2 template?
Use the {% macro macro_name(params) %} ... {% endmacro %} syntax to define a macro with optional parameters.
Click to reveal answer
beginner
How do you call a macro inside a Jinja2 template?
Call a macro by its name with parentheses and arguments if needed, like {{ macro_name(arg1, arg2) }}.
Click to reveal answer
intermediate
Why use macros for reusable components in Flask templates?
Macros help keep templates clean and DRY (Don't Repeat Yourself) by reusing common HTML or template code blocks easily.
Click to reveal answer
intermediate
How can you organize macros for reuse across multiple templates?
Put macros in a separate template file and import them using <code>{% import 'macros.html' as macros %}</code> to use in other templates.
Click to reveal answer
What is the correct way to define a macro named 'button' with a parameter 'label'?
A{{ macro button(label) }} ... {{ endmacro }}
B{% macro button(label) %} ... {% endmacro %}
C{% def button(label) %} ... {% enddef %}
D<macro name='button' param='label'> ... </macro>
How do you use a macro named 'button' with argument 'Click me' inside a template?
A{% button('Click me') %}
B{{ call button('Click me') }}
C{{ button('Click me') }}
D{% use button('Click me') %}
Which statement correctly imports macros from 'macros.html' as 'ui'?
A{% import 'macros.html' as ui %}
B{% include 'macros.html' as ui %}
C{% from 'macros.html' import ui %}
D{% use 'macros.html' as ui %}
Why are macros preferred over copying HTML code in multiple templates?
AThey reduce repetition and make maintenance easier.
BThey make templates load faster.
CThey automatically style components.
DThey prevent syntax errors.
If you have a macro 'button' imported as 'ui', how do you call it?
A{% button.ui() %}
B{{ button.ui() }}
C{% ui.button() %}
D{{ ui.button() }}
Explain how to create and use a macro for a reusable button component in Flask templates.
Think about how to avoid repeating the same button HTML everywhere.
You got /4 concepts.
    Describe the benefits of using macros for reusable components in Flask's Jinja2 templates.
    Consider how macros help when you update a component used many times.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using {% macro %} in Flask templates?
      easy
      A. To create reusable blocks of HTML code
      B. To define Python functions inside templates
      C. To import external CSS files
      D. To handle form submissions

      Solution

      1. Step 1: Understand what macros do in Flask templates

        Macros are used to write reusable HTML blocks that can be called multiple times to avoid repetition.
      2. Step 2: Compare options with macro purpose

        Only To create reusable blocks of HTML code correctly describes macros as reusable HTML blocks. Other options describe unrelated tasks.
      3. Final Answer:

        To create reusable blocks of HTML code -> Option A
      4. Quick Check:

        Macros = reusable HTML blocks [OK]
      Hint: Macros create reusable HTML snippets in templates [OK]
      Common Mistakes:
      • Thinking macros define Python functions
      • Confusing macros with CSS imports
      • Assuming macros handle form data
      2. Which of the following is the correct syntax to define a macro named button that takes a parameter label?
      easy
      A. {% define button(label) %} {{ label }} {% enddefine %}
      B. {% macro button(label) %} {{ label }} {% endmacro %}
      C. {{ macro button(label) }} {{ label }} {{ endmacro }}
      D. <% macro button(label) %> {{ label }} <% endmacro %>

      Solution

      1. Step 1: Recall correct macro syntax in Flask Jinja templates

        Macros are defined with {% macro name(params) %} ... {% endmacro %} tags.
      2. Step 2: Check each option's syntax

        {% macro button(label) %} {{ label }} {% endmacro %} uses correct {% %} tags and endmacro. Others use wrong delimiters or keywords.
      3. Final Answer:

        {% macro button(label) %} <button>{{ label }}</button> {% endmacro %} -> Option B
      4. Quick Check:

        Macro syntax = {% macro %} ... {% endmacro %} [OK]
      Hint: Use {% macro %} and {% endmacro %} to define macros [OK]
      Common Mistakes:
      • Using {{ }} instead of {% %} for macro definition
      • Using incorrect keywords like define or <% %>
      • Forgetting the endmacro tag
      3. Given the macro defined in macros.html as:
      {% raw %}{% macro greet(name) %}Hello, {{ name }}!{% endmacro %}{% endraw %}

      And imported in index.html with:
      {% raw %}{% import 'macros.html' as m %}{% endraw %}

      What will be the output of {{ m.greet('Alice') }} in index.html?
      medium
      A. Error: macro not found
      B. {{ m.greet('Alice') }}
      C. greet('Alice')
      D. Hello, Alice!

      Solution

      1. Step 1: Understand macro import and usage

        The macro greet(name) returns 'Hello, {{ name }}!'. Importing as m allows calling m.greet('Alice').
      2. Step 2: Evaluate the macro call output

        Calling m.greet('Alice') replaces {{ name }} with 'Alice', so output is 'Hello, Alice!'.
      3. Final Answer:

        Hello, Alice! -> Option D
      4. Quick Check:

        Macro call with parameter = rendered string [OK]
      Hint: Imported macros called with alias render output [OK]
      Common Mistakes:
      • Expecting literal macro call text instead of rendered output
      • Forgetting to import macros before use
      • Confusing macro call syntax with variable output
      4. What is wrong with this macro usage in a Flask template?
      {% raw %}{% macro card(title) %}
      {{ title }}
      {% endmacro %}{% endraw %}
      {{ card() }}
      medium
      A. The macro is not properly closed with {% endmacro %}
      B. Macros cannot return HTML elements
      C. The macro is called without the required parameter
      D. The macro name is invalid

      Solution

      1. Step 1: Check macro definition and parameters

        The macro card requires one parameter: title.
      2. Step 2: Check macro call

        The call {{ card() }} provides no argument, causing an error due to missing parameter.
      3. Final Answer:

        The macro is called without the required parameter -> Option C
      4. Quick Check:

        Missing macro argument = error [OK]
      Hint: Always pass required parameters when calling macros [OK]
      Common Mistakes:
      • Calling macros without required arguments
      • Thinking macros must return plain text only
      • Missing endmacro tag (not the case here)
      5. You want to create a reusable navigation bar macro that highlights the current page. Which approach correctly uses macros and parameters to achieve this?
      hard
      A. {% raw %}{% macro navbar(current) %}{% endmacro %}{% endraw %} Then call with {{ navbar('about') }}
      B. {% raw %}{% macro navbar() %}{% endmacro %}{% endraw %} Then call with {{ navbar() }}
      C. {% raw %}{% macro navbar(current) %}{% endmacro %}{% endraw %} Then call with {{ navbar('home') }}
      D. {% raw %}{% macro navbar(current) %}{% endmacro %}{% endraw %} Then call with {{ navbar('home') }}

      Solution

      1. Step 1: Understand the need for dynamic class assignment

        The macro should accept a parameter to know which page is current and add 'active' class accordingly.
      2. Step 2: Analyze each option's approach

        {% raw %}{% macro navbar(current) %}{% endmacro %}{% endraw %} Then call with {{ navbar('about') }} uses a parameter and conditional expression to add 'active' class only to the current page link. Others either hardcode classes or ignore the parameter.
      3. Final Answer:

        Uses parameters and conditional logic to highlight current page -> Option A
      4. Quick Check:

        Dynamic class with parameter = correct navbar macro [OK]
      Hint: Use macro parameters with conditionals for dynamic HTML [OK]
      Common Mistakes:
      • Hardcoding active class without parameters
      • Ignoring the current page parameter
      • Assigning 'current' class to all links
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard