📖 Scenario: You are building a Django web app that shows a list of product prices. You want to display prices formatted as currency with a dollar sign and two decimals.
🎯 Goal: Create a custom Django template filter called currency that formats a number as US dollars (e.g., 12.5 becomes "$12.50") and use it in a template to display product prices.
📋 What You'll Learn
Create a Python dictionary called products with these entries: 'apple': 0.5, 'banana': 0.3, 'cherry': 1.2
Create a variable called currency_symbol and set it to '$'
Write a custom template filter function called currency that takes a number and returns a string formatted as currency_symbol plus the number with two decimals
Use the currency filter in a Django template to display each product's price formatted as currency
💡 Why This Matters
🌍 Real World
Custom template filters help format data in Django templates to improve user experience, such as showing prices in a readable currency format.
💼 Career
Knowing how to create and use custom template filters is important for Django developers to customize how data is displayed in web applications.
Progress0 / 4 steps
1
Set up the product prices dictionary
Create a Python dictionary called products with these exact entries: 'apple': 0.5, 'banana': 0.3, and 'cherry': 1.2.
Django
Hint
Use curly braces {} to create a dictionary with keys and values separated by colons.
2
Add a currency symbol variable
Create a variable called currency_symbol and set it to the string '$'.
Django
Hint
Assign the string '$' to the variable currency_symbol.
3
Write the custom template filter function
Write a function called currency that takes one argument value. It should return a string combining currency_symbol and value formatted with two decimal places (e.g., "$12.50").
Django
Hint
Use an f-string to format the number with two decimals and add the currency symbol in front.
4
Use the custom filter in a Django template
In a Django template, use a for loop with variables product and price to iterate over products.items(). Inside the loop, display the product name and the price using the currency filter like this: {{ price|currency }}.
Django
Hint
Use Django template syntax with {% for %} and {{ }} to loop and display filtered prices.
Practice
(1/5)
1. What is the main purpose of a custom template filter in Django?
easy
A. To modify or format data directly in templates
B. To create new database models
C. To handle user authentication
D. To define URL routing rules
Solution
Step 1: Understand what template filters do
Template filters change how data appears in templates without changing the data itself.
Step 2: Identify the purpose of custom filters
Custom filters let you create your own ways to format or modify data in templates.
Final Answer:
To modify or format data directly in templates -> Option A
Quick Check:
Custom template filters = modify/format data [OK]
Hint: Filters change data display in templates using pipes [OK]
Common Mistakes:
Confusing filters with models or views
Thinking filters handle database or routing
Assuming filters process user authentication
2. Which of the following is the correct way to register a custom filter in Django?
easy
A. Use @app.route decorator above the filter function
B. Use @register.filter decorator above the filter function
C. Define the filter inside the models.py file
D. Call filter() method on the template object
Solution
Step 1: Recall how to register filters
Custom filters are registered using the @register.filter decorator from django.template.Library.
Step 2: Eliminate incorrect options
@app.route is for Flask routing, models.py is for models, and filter() method on template is invalid.
Final Answer:
Use @register.filter decorator above the filter function -> Option B
B. The filter function should be named 'upper_case' instead
C. The filter function is not decorated with @register.filter
D. The filter function must return a number
Solution
Step 1: Check filter registration method
The code uses manual registration with register.filter('uppercase', uppercase). The recommended modern approach is the @register.filter decorator on the function.
Step 2: Eliminate other incorrect options
Filters are not defined in models.py, the function name is arbitrary, and returning strings is valid.
Final Answer:
The filter function is not decorated with @register.filter -> Option C
Hint: Always use @register.filter decorator for clarity [OK]
Common Mistakes:
Thinking function name must be specific
Placing filters in models.py instead of templatetags
Believing filters must return numbers only
5. You want to create a custom filter that returns the first letter of a string in uppercase, but if the string is empty or null, it should return 'N/A'. Which of these filter implementations is correct?
hard
A. from django import template
register = template.Library()
@register.filter
def first_upper(value):
if not value:
return 'N/A'
return value[0].upper()
B. from django import template
register = template.Library()
@register.filter
def first_upper(value):
return value[0].upper()
C. from django import template
register = template.Library()
@register.filter
def first_upper(value):
if value == null:
return ''
return value[0]
D. from django import template
register = template.Library()
@register.filter
def first_upper(value):
return value.upper()[0]
Solution
Step 1: Check handling of empty or null values
The correct one checks if not value (falsy for empty/None) and returns 'N/A'; otherwise value[0].upper().
Step 2: Verify output for valid strings
For non-empty strings, it returns the first character uppercased.
Step 3: Identify issues in other options
The second lacks empty check (IndexError on empty). The third uses invalid 'null' (NameError) and no uppercase. The fourth uppercases whole string unnecessarily and errors on empty.
Final Answer:
The implementation handling empty with 'N/A' and uppercasing first letter -> Option A
Quick Check:
Check empty first, then uppercase first letter [OK]
Hint: Always check for empty before accessing string index [OK]
Common Mistakes:
Not checking for null or empty strings
Returning wrong default value
Uppercasing entire string unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.