Jun 30, 2015 · Updated: Jul 12, 2021 · by Tim Kamanin
Injecting ads inside content is a very effective technique. Let's say you want to inject Adsense ad after the first paragraph of text. To add such capability to our Django-based website we need to create a custom filter for that. I'll tell you how to implement such a filter.
In your app, create a templatetags/adsense_tags.py
file with the following code:
from django import template
from django.template.loader import render_to_string
register = template.Library()
@register.filter
def inject_adsense_after_paragraph(value, arg):
# Render our adsense code placed in html file
ad_code = render_to_string("app_name/adsense_ads.html")
# Break down content into paragraphs
paragraphs = value.split("</p>")
# Check if paragraph we want to post after exists
if arg < len(paragraphs):
# Append our code before the following paragraph
paragraphs[arg] = ad_code + paragraphs[arg]
# Assemble our text back with injected adsense code
value = "</p>".join(paragraphs)
return value
Then you need to put your Adsense code into the
app_name/adsense_ads.html
file, you may have something like this:
<script
async
src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"
></script>
<ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-xxxxxxxxxxx"
data-ad-slot="xxxxxxxxxxx"
data-ad-format="auto"
></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
In the end, let's use our filter on content, let's say your blog post has a
following template blog/blogpost_detail.html
:
{% extends 'base.html' %}
{% load adsense_tags %}
{% block content %}
{% blog.title %}
{% blog.body|inject_adsense_after_paragraph:1 %}
{% endblock content %}
As you see, all we need to do is to add filter inject_adsense_after_paragraph
to our blog body and pass number of the paragraph after which we want to show the ad. In our case, we want to display the add after the first paragraph of text.
Hey, if you've found this useful, please share the post to help other folks find it: