Mastering AI Prompt Engineering with Jinja2 and Python
The Shift to Prompt Templating
Hard-coding strings for AI prompts quickly becomes a maintenance nightmare. While tools like offer extensive features, they can sometimes feel over-engineered for straightforward implementations. Using —a library traditionally used for HTML rendering—provides a clean, logic-driven way to manage complex prompts. It allows you to separate your instructions from your data, making your AI interactions more predictable and scalable.
Prerequisites
To follow along, you need a basic understanding of (specifically version 3.12 for the latest syntax). You should also have an API key and familiarity with installing packages via pip.
Key Libraries & Tools
- : A powerful templating engine for Python that supports variables, filters, and control flow.
- : The official library for interacting with GPT models.
- Better Jinja: A recommended extension for syntax highlighting.
Building a Functional Chat Wrapper
Instead of calling the API directly everywhere, wrap it in a closure. This pattern captures the client in a local scope, returning a simplified function that only requires your prompt string.

from openai import OpenAI
def chatter(api_key: str, model: str):
client = OpenAI(api_key=api_key)
def send_chat_request(query: str) -> str:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": query}]
)
return response.choices[0].message.content
return send_chat_request
Designing Your Prompt Template
Create a .jinja file to define your prompt. Using double curly braces {{ }} allows you to inject variables dynamically at runtime.
Write an email to {{ customer_name }} explaining that {{ product }} is out of stock.
Suggest {{ alternative }} as a replacement.
Use a {{ tone }} tone.
- {{ ceo_name }}
Executing the Workflow
To tie it together, use a helper function to render the template with your data dictionary and pass the resulting string to your chatter function. This keeps your main execution logic clean and readable.
Tips & Gotchas
Always ensure you install the Jinja2 package, not the older Jinja package. When building complex prompts, utilize Jinja's if/else logic to handle optional data fields, ensuring the LLM doesn't receive empty placeholders.
- 25%· products
- 25%· companies
- 13%· products
- 13%· products
- 13%· products
- 13%· products

How To Do AI Prompt Templating
WatchArjanCodes // 7:00
On this channel, I post videos about programming and software design to help you take your coding skills to the next level. I'm an entrepreneur and a university lecturer in computer science, with more than 20 years of experience in software development and design. If you're a software developer and you want to improve your development skills, and learn more about programming in general, make sure to subscribe for helpful videos. I post a video here every Friday. If you have any suggestion for a topic you'd like me to cover, just leave a comment on any of my videos and I'll take it under consideration. Thanks for watching!