export to template context question

SOLVE
Regular Contributor

I have two blogs:

Default: Posts

Team Members: Member bios and contact information

 

On each bio (in Team blog) , I'm trying to display the 3 most recent posts by each member (found in Default blog.)

 

When I use the following code in the team blog post template, it works. I get the 3 recent results from john-doe.

 

{% set author_posts = blog_recent_author_posts('default', 'john-doe', 3) %}
{% for author_post in author_posts %}
    <div class="post-title">{{ author_post.name }}</div>
{% endfor %}

However, I need this to be team-member-specific.

 

So, to the Team Member blog page, I added a field to enter the author slug:

{% text "authslug" label="Author Slug", export_to_template_context=True %}

And I am able to output that value in my template with:

{{ content.widgets.authslug.body.value }}

 

EXCEPT, for when I try to put that code into the call for the 3 posts:

{% set author_posts = blog_recent_author_posts('default', '{{ content.widgets.authslug.body.value }}', 3) %}
{% for author_post in author_posts %}
    <div class="post-title">{{ author_post.name }}</div>
{% endfor %}

Any ideas on how to get the team member's author slug(from default blog) to output in the code above?

 

 

Reply
0 Upvotes
1 Accepted solution

Accepted Solutions
Highlighted
Top Advisor

@jestlinbaum you have a simple syntax error.

 

I can't impress with terminology, but basically you a create python 'environment' inside of code blocs wrapped in "{{ }}" or "{% %}". Creating an 'environment' inside of an 'environment' is redudant. Feel free to check me on my phrasing.

 

{% set author_posts = blog_recent_author_posts('default', content.widgets.authslug.body.value, 3) %}
{% for author_post in author_posts %}
    <div class="post-title">{{ author_post.name }}</div>
{% endfor %}

I removed the curlys and the quotes. Now you are essentially calling a variable inside of your code block instead of printing the string '{{content.widgets.authslug.body.value}}' which is what is happening in your code. 

7 Replies
Regular Advisor | Gold Partner | HubSpot Certified Trainer

@jestlinbaum - I'm not at computer right now but, I think there's an allWidgets index in the dict.

Try inspecting the data from 

{{content.allWidgets|pprint}}

see if it's in there.

Reply
0 Upvotes
Regular Contributor

@tjoyce yes it's in there. I am able to output the field anywhere in the template EXCEPT in the call to the other blog.

 

I am on the Team Blog post template calling for articles from the Default Blog. When I put in the author slug it works correctly:

 

{% set author_posts = blog_recent_author_posts('5686817676', 'john-doe', 3) %}
{% for author_post in author_posts %}
    <div class="post-title">{{ author_post.name }}</div>
{% endfor %}

But when I try to populate the author slug from the custom field in the Team Post it does not work:

 

 

{% set author_posts = blog_recent_author_posts('5686817676', '{{ content.widgets.authslug.body.value }}', 3) %}
{% for author_post in author_posts %}
    <div class="post-title">{{ author_post.name }}</div>
{% endfor %}

'5686817676' is referencing the Default Blog. However '{{ content.widgets.authslug.body.value }}' is referencing a custom field from the Team Blog post (the template I am working in). I think that is why it is not working. I'm wondering if there is a workaround.

 

Reply
0 Upvotes
Regular Contributor

@tjoyce yes it shows up. I can get the value to print anywhere EXCEPT in the call to the default blog.

 

I am on the Team Blog post template calling for articles from the Default Blog. When I put in the author slug it works correctly:

{% set author_posts = blog_recent_author_posts('5686817676', 'john-doe', 3) %}
{% for author_post in author_posts %}
<div class="post-title">{{ author_post.name }}</div>
{% endfor %}

 


But when I try to populate the author slug from the custom field in the Team Post it does not work:

{% set author_posts = blog_recent_author_posts('5686817676', '{{ content.widgets.authslug.body.value }}', 3) %}
{% for author_post in author_posts %}
<div class="post-title">{{ author_post.name }}</div>
{% endfor %}

 

'5686817676' is referencing the Default Blog. However '{{ content.widgets.authslug.body.value }}' is referencing a custom field from the Team Blog post (the template I am working in). I think that is why it is not working. I'm wondering if there is a workaround.

 

Reply
0 Upvotes
Regular Contributor

@tjoyce yes it shows up. I can get the value to print anywhere EXCEPT in the call to the default blog.

 

I am on the Team Blog post template calling for articles from the Default Blog. When I put in the author slug it works correctly:

{% set author_posts = blog_recent_author_posts('5686817676', 'john-doe', 3) %}
{% for author_post in author_posts %}
<div class="post-title">{{ author_post.name }}</div>
{% endfor %}


But when I try to populate the author slug from the custom field in the Team Post it does not work:

{% set author_posts = blog_recent_author_posts('5686817676', '{{ content.widgets.authslug.body.value }}', 3) %}
{% for author_post in author_posts %}
<div class="post-title">{{ author_post.name }}</div>
{% endfor %}

'5686817676' is referencing the Default Blog. However '{{ content.widgets.authslug.body.value }}' is referencing a custom field from the Team Blog post (the template I am working in). I think that is why it is not working. I'm wondering if there is a workaround.

 

Reply
0 Upvotes
Regular Advisor | Gold Partner | HubSpot Certified Trainer

yea @jestlinbaum - this is a long shot but sometimes I have to do 

{{ content.allWidgets.authslug.body.value }}

aside from that, maybe @Jsum knows what's going on here. 

Reply
0 Upvotes
Highlighted
Top Advisor

@jestlinbaum you have a simple syntax error.

 

I can't impress with terminology, but basically you a create python 'environment' inside of code blocs wrapped in "{{ }}" or "{% %}". Creating an 'environment' inside of an 'environment' is redudant. Feel free to check me on my phrasing.

 

{% set author_posts = blog_recent_author_posts('default', content.widgets.authslug.body.value, 3) %}
{% for author_post in author_posts %}
    <div class="post-title">{{ author_post.name }}</div>
{% endfor %}

I removed the curlys and the quotes. Now you are essentially calling a variable inside of your code block instead of printing the string '{{content.widgets.authslug.body.value}}' which is what is happening in your code. 

Regular Contributor

@Jsum ah I see.

 

Your fix is working perfectly. Thank you so much!