Skip to main content

This package allows you to easily integrate advertising blocks from the Yandex Advertising Network onto any website built using the Django framework.

Project description

Django Yandex Ad Manager

A comprehensive Django application for managing and displaying Yandex advertising blocks with advanced configuration options. See the comprehensive guide on https://timthewebmaster.com/en/tools/django-yandex-ad-manager/

Features

  • Multiple Ad Types: Support for banners, full-screen ads, floor ads, top ads, carousels, and in-image ads
  • Platform Targeting: Display ads on specific platforms (desktop, mobile, or cross-platform)
  • Flexible Configuration: Manage ad locations, display frequency, and placement rules
  • Middleware Integration: Automatic ad injection into templates based on view and template rules
  • Customizable Templates: Extensible template system for different ad formats
  • Context-Aware: Smart ad placement with context data integration
  • Pagination Support: Automatic ad insertion between content pages

Installation

pip install django-yandex-ad-manager

Requirements

  • Django 3.2+
  • Python 3.7+

Configuration

1. Add to INSTALLED_APPS

INSTALLED_APPS = [
    # ...
    'django_yandex_ad_manager',
    # ...
]

2. Add Middleware

MIDDLEWARE = [
    # ...
    'django_yandex_ad_manager.middleware.AdManagerMiddleware',
    # ...
]

4. Set up allowed views and templates, to render into

# Yandex ad manager
# For example, you should paste your view's names and templates
YANDEX_AD_MANAGER__ALLOWED_VIEWS = ('home', 'article', 'tool', 'tool_main')
YANDEX_AD_MANAGER__ALLOWED_TEMPLATES = ('PagiScroll/base_post_list.html', 'Post/basic--post_preview-article.html', 'Post/basic--post_preview-note.html', 'Post/basic--post_preview-tool.html' )

3. Run Migrations

python manage.py migrate

4. Configure Static Files

Make sure to collect static files after installation:

python manage.py collectstatic

Models Overview

YandexAdBlock

Defines individual ad blocks with properties:

  • Ad Types: banner, fullscreen, floorAd, topAd, feed, inImage
  • Push Triggers: on-load, on-intersection This means when your website should make a request to Yandex, to retrieve an Ad.
    • on-load means as soon as possible
    • on-intersection means when users viewport intersects with an Ad element.
  • Platform Targeting: desktop, mobile, crossplatform

YandexAdLocation

Maps ad blocks to specific locations on your site. You should specify them by yourself

YandexAdBlockConfiguration

Groups ad locations and defines display frequency.

YandexCurrentAdBlockConfiguration

Singleton model to manage the currently active ad configuration.

Template Integration Examples

1. Required Headers in Base Template

Include these in your base template's head section (<head> tag):

{% if isYandexAdManagerMiddlewareConnected %}
    {% include 'YandexAdManager/admanager_header.html' %}
{% endif %}

2. Styles and Scripts

Include in your base template's styles and scripts blocks:

{% block styles %}
    {% if isYandexAdManagerMiddlewareConnected %}
        {% include 'YandexAdManager/admanager_styles.html' %}
    {% endif %}
{% endblock %}

{% block scripts %}
    {% if isYandexAdManagerMiddlewareConnected %}
        {% include 'YandexAdManager/admanager_scripts.html' %}
    {% endif %}
{% endblock %}

Ad Placement Examples

The blocks below should be used whenever you want your ad to be displayed. This is not applied to those Ad blocks without containers (topAd, floorAd, fullscreen, inImage)

Single element Integration

{% if isYandexAdManagerMiddlewareConnected %}
    {% for adlocation in adlocations %}
        {% if adlocation.adlocation_name == "HOME_FIRST_VISIBLE" %}
            {% include 'YandexAdManager/admanager_element.html' with adblock=adlocation.adblock%}
        {% endif %}
    {% endfor %}
{% endif %}

Multiple elements Integration

unificator should be used only if you use one YandexAdBlock for different location on the same page

{% if isYandexAdManagerMiddlewareConnected %}
    {% for adlocation in adlocations %}
        {% if adlocation.adlocation_name == "HOME_FIRST_VISIBLE" %}
            {% include 'YandexAdManager/admanager_element.html' with adblock=adlocation.adblock unificator="home_first_visible" %}
        {% endif %}
        {% if adlocation.adlocation_name == "HOME_SECOND_VISIBLE" %}
            {% include 'YandexAdManager/admanager_element.html' with adblock=adlocation.adblock unificator="home_second_visible" %}
        {% endif %}
    {% endfor %}
{% endif %}

Paginated Lists Integration

{% if isYandexAdManagerMiddlewareConnected %}
    {# Ads between articles in pagination #}
    {% for adlocation in adlocations %}
        {% if adlocation.adlocation_name == "ON_PAGISCROLL_ARTICLES_BETWEEN_PAGES" %}
            {% include 'YandexAdManager/admanager_element_in_pagination.html' with page=page adblock=adlocation.adblock %}
        {% endif %}
    {% endfor %}
{% endif %}

Advanced Configuration

Display Frequency Control

Control how often ads appear in paginated lists:

# In YandexAdBlockConfiguration model
adnetwork_step_by = 3  # Show ad every 3 items

Platform Targeting

# Available options
PlatformToDisplay.CROSSPLATFORM  # All devices
PlatformToDisplay.DESKTOP        # Desktop only  
PlatformToDisplay.MOBILE         # Mobile only

Push Triggers

PushOn.ON_LOAD           # Load immediately
PushOn.ON_INTERSECTION   # Load when visible in viewport

Middleware Configuration

The AdManagerMiddleware automatically injects context data and handles ad placement:

class AdManagerMiddleware:
    allowed_views = ('home', 'article', 'tool', 'tool_main')
    allowed_templates = (
        'PagiScroll/base_post_list.html',
        'Post/basic--post_preview-article.html',
        'Post/basic--post_preview-note.html', 
        'Post/basic--post_preview-tool.html'
    )

Best Practices

  1. Use descriptive unificators to track ad performance in different locations
  2. Test on multiple devices when using platform targeting
  3. Monitor ad density to avoid overwhelming users
  4. Use intersection-based loading for better performance
  5. Configure appropriate ad types for different content contexts

Troubleshooting

Ads Not Showing

  • Check if middleware is properly configured
  • Verify isYandexAdManagerMiddlewareConnected is True in templates
  • Ensure ad locations are properly configured in admin
  • Check browser console for JavaScript errors

Performance Issues

  • Use ON_INTERSECTION for non-critical ads
  • Minimize use of full-screen ads
  • Implement lazy loading where appropriate

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Submit a pull request

License

ISC License - see package.json for details.

Support

For issues and questions, please open an issue on the GitHub repository.

Compatibility

  • Django 3.2, 4.0, 4.1, 4.2
  • Python 3.7, 3.8, 3.9, 3.10, 3.11

Note: This package is not officially affiliated with Yandex. It's a community-maintained Django integration for Yandex Advertising Network.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_yandex_ad_manager-0.0.2.tar.gz (31.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_yandex_ad_manager-0.0.2-py3-none-any.whl (43.5 kB view details)

Uploaded Python 3

File details

Details for the file django_yandex_ad_manager-0.0.2.tar.gz.

File metadata

File hashes

Hashes for django_yandex_ad_manager-0.0.2.tar.gz
Algorithm Hash digest
SHA256 3437a810be9b707d666b5d4e1d1d55ea36e3b0fdad98cf8d1a523107b964b178
MD5 e9df8b0407616c3fbcb46a3641eaa956
BLAKE2b-256 c76ba3d4c8ac78cc025dcbeaa04dcaed85dcf62ea4cb9d5b9a55687513795280

See more details on using hashes here.

File details

Details for the file django_yandex_ad_manager-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_yandex_ad_manager-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8e23bae905d74ee453029faf40d63416afbc399ad2b8831812be5b5e40d5ca36
MD5 caf1349523b9b76febbebc52e99c62fc
BLAKE2b-256 12cf4a7ac0821c4b441bf5287763e2ec10130af85d6c004c58de0d75289a9dce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page