I have a Django project. I use Wordpress as an admin panel. I call WP API during handling one of views.
Here is the view:
def blog(request):
sys.stderr.write('views.blog started to process\n')
if request.method == 'GET':
list_of_blogposts = []
# load all posts
try:
response = wp.get_all_post()
all_posts = json.loads(response.text)
sys.stderr.write('path /blog - all done' + all_posts)
except Http404:
msg = 'Unable to load blogposts.'
sys.stderr.write(msg)
raise Http404(msg)
except TimeoutError:
msg = 'Requst timed out.'
sys.stderr.write(msg)
raise TimeoutError(msg)
except Exception:
msg = 'Exception'
sys.stderr.write(msg + str(traceback.extract_stack()))
# iterate all posts
try:
# get all images
m = wp.get_all_images()
media = json.loads(m.text)
for post in all_posts:
img = post["featured_media"]
url = u.get_image_url(media, img)
b = {
"body": post["content"]["rendered"],
"title": post["title"]["rendered"],
"summary": post["excerpt"]["rendered"],
"image_url": str(url),
"post_id": post["id"],
"publishedAt": u.convert_dt_to_str(post["date"])
}
# add post to list for response
list_of_blogposts.append(b)
except TypeError or ValueError or RuntimeError or KeyError:
sys.stderr.write('Iteration through posts failed.')
raise Exception('Unexpected error. Try again later.')
context = {'posts_list': list_of_blogposts}
return render(request, 'web/blog.html', context)
else:
raise Http404("Incorrect HTTP method.")
It works great as I want. When I create Docker image and run it on linux server I got - TypeError: string indices must be integers, not 'str' at line where is img = post["featured_media"]
.
I am confused because when I debug the issue I see that post is dictionary and it should be possible to go through like I did.
I appreciate any help or hint. Thank you in advance.
source https://stackoverflow.com/questions/76240243/typeerror-while-iterating-list-of-dictionaries-in-docker-container
Comments
Post a Comment