--- title: "Dynamic Content Blocks" slug: "dynamic-content-blocks" updated: 2026-07-16T18:13:05Z published: 2026-07-16T18:13:05Z canonical: "knowledge.technolutions.net/dynamic-content-blocks" --- > ## Documentation Index > Fetch the complete documentation index at: https://knowledge.technolutions.net/llms.txt > Use this file to discover all available pages before exploring further. # Dynamic Content Blocks **Dynamic content blocks** enable streamlined creation of personalized content in [Deliver mailings](/v1/docs/deliver-overview) and [form communications](/v1/docs/form-communications). Dynamic content blocks can make full use of merge fields, liquid markup, and even other content blocks. ## Before you begin First, create a new [content block](/v1/docs/content-blocks). You can add Liquid markup, merge fields, and calls to other content blocks when you first create your content block, or you can return and add them later. > [!NOTE] > 💡 Tip > > Use default export names in your dynamic content blocks to ensure they match your recipient list exports. For example, Slate automatically names the First Name export "Person First" and defaults its merge field to Person-First. Use that same merge field in your content blocks, and the two will always align. ## Dynamic content blocks in Deliver mailings To add a dynamic content block to a Deliver Mailing, all exports used within the dynamic content block must be configured within the recipient lists for the mailing. 1. Create or edit the mailing that will include the dynamic content block. 2. Select **Edit Recipient Lists**. The Recipient Lists page appears. [![Recipient Lists Button](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/edit_recipient_lists_button.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D)](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/edit_recipient_lists_button.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D) 3. Select an existing recipient list to edit, or select **New Query** to [create a new recipient list](/v1/docs/adding-a-recipient-list). 4. If editing an existing recipient list, select **Edit Query** to open the query editor. Otherwise, selecting **New Query** in the previous step will open the query editor. 5. Select **Export** 6. [Add exports](/v1/docs/adding-and-configuring-exports). Any information that will be used as a merge field or condition within the dynamic content block must be configured as an export within the recipient list. For example, if the dynamic content block uses conditional logic to show only information about scholarships to students with a cumulative GPA of 3.5 or higher, "Cumulative GPA" must be selected as an export. 7. Configure any desired filters for this communication as described in the Knowledge Base article on [Adding a Recipient List](/v1/docs/adding-a-recipient-list#new-query-setup). 8. Return to the mailing and select **Edit Message.** On the right side of the WYSIWYG editor, exports appear as merge fields. The names of these exports must match the names of any merge fields contained within the dynamic content blocks. 9. [Insert the dynamic content block into the message](/v1/docs/content-blocks#displaying-content-blocks). 10. Use **Display Sample Message** the mailing editor to test that the dynamic content blocks work as expected. ## Dynamic content blocks in form communications To add a dynamic content block to a form communication, all merge fields used within the dynamic content block must be added as exports for the communication. 1. Create or edit a form that will have a dynamic content block in its communications. 2. Select **Edit Communications**. 3. To create a new mailing, select **New Mailing.** To edit an existing mailing, select **Edit Mailing** under the mailing details. 4. Select **Edit Conditions.** The exclusivity group, exports, and filters can be configured here. 5. Select **Export** to add the needed exports to the form communication. You can select from any data points that will be collected on the form, or you can join to other query bases to select other exports. Remember that any merge fields or conditions within the dynamic content block must be configured as exports here. (For example, if the dynamic content block uses conditional logic to only show information about scholarships to students with a cumulative GPA of 3.5 or higher, cumulative GPA must be included as an export in your form communication mailing.) 6. Once you have selected all necessary exports, select **Continue**. 7. Make sure that the names of the exports in your list match the merge fields in your dynamic content block. To change the name of an export, double-Select the export and rename it to match your dynamic content block merge field or condition. 8. Select **Save**. 9. Follow the guide in the [Content Blocks](/v1/docs/content-blocks) Knowledge Base article to insert the dynamic content block into the message. 10. Use the **Submit Form Test** function in the form communication mailing editor to test that the dynamic content blocks work as expected. ## Recursion in dynamic content blocks Dynamic content blocks can call other content blocks. They can also pass exports through into merge fields within those content blocks. Using a content block embedded within another content block allows for simplified generation of personalized content, but also requires creators of dynamic content blocks to understand the limits of recursion. Content blocks are limited to two levels of recursion, meaning that a content block can reference up to two more content blocks. | **First content block (top level)** ✅ OK \| **Second content block (1st recursion)** ✅ OK \\| **Third content block (2nd recursion)** ✅ OK \\\| **Fourth content block (3rd recursion)** ❌ Error \\\| \\\| --- \\\| \\| \\| --- \\| \\| **Fourth content block (3rd recursion)** ❌ Error \\| \| \| --- \| \| **Third content block (2nd recursion)** ✅ OK \\| **Fourth content block (3rd recursion)** ❌ Error \\| \\| --- \\| \| \| **Fourth content block (3rd recursion)** ❌ Error \| | | --- | | **Second content block (1st recursion)** ✅ OK \| **Third content block (2nd recursion)** ✅ OK \\| **Fourth content block (3rd recursion)** ❌ Error \\| \\| --- \\| \| \| --- \| \| **Fourth content block (3rd recursion)** ❌ Error \| | | **Third content block (2nd recursion)** ✅ OK \| **Fourth content block (3rd recursion)** ❌ Error \| \| --- \| | | **Fourth content block (3rd recursion)** ❌ Error | Placing too many levels of recursion within content blocks will generate the following error when attempting to save the content: ![Too many recursions error](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/ngbtzco5teil2v6bfehaqmceclip0.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D) ## Dynamic content block examples The following example shows a Deliver mailing opened for editing with a content block inserted into the message body. The content block is set up to pull information into the email based on the major indicated on the Person Record of the recipient: [![Mailing with content block](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/q7h7lko000cjyqcjwtqrqmceclip4.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D)](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/q7h7lko000cjyqcjwtqrqmceclip4.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D) If we navigate to content blocks and open the dynamic content block for one specific major, we can see that the content block for “Government” is calling another content block related to scholarships, and will display scholarship information based on the Entry Term export in our mailing’s recipient list: [![Content block recursion](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/xrv46kg0zusqsvvjrlgd2wmceclip5.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D)](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/xrv46kg0zusqsvvjrlgd2wmceclip5.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D) When sent, our mailing will display major-specific information based on the recipient’s listed major. The information will come from the content block that we inserted into our mailing, and some of the information will be static for all recipients with that major. However, since the content block is dynamic and includes a second content block about scholarships, the appropriate scholarship information will also be displayed in our mailing, and the scholarship information that is included will be determined by the Entry Term export we included in our recipient list. For this example, we needed: - A **Deliver mailing** with at least one recipient list - A **Person-Major export** within the recipient list - An **Entry-Term export** within the recipient list - A `dynamic_majors` **content block** that displays data based on the Person-Major export - A `dynamic_scholarships` **content block** that displays data within the `dynamic_majors` content block based on the Entry-Term export With all of these elements working together, our recipient with a Government major and a cumulative GPA of 3.5 or higher will receive the following email: ![Successful mailing](https://cdn.us.document360.io/cd8ea7a6-07f3-4846-a554-627ac016d3e3/Images/Documentation/qvjqgoh7kcahnl9lgpqnwmceclip6.png?sv=2026-02-06&spr=https&st=2026-10-12T12%3A54%3A33Z&se=2026-10-12T13%3A54%3A33Z&sr=c&sp=r&sig=QEqwilpTctqFb%2FaAOQ4IK5283fH0Qs0iaqShjGifHjg%3D) ## Related - [Advanced Liquid Markup](/advanced-liquid-markup.md)