Skip to main content

Django global query strings allows adding query strings (query params) site-wide

Project description

Django global query strings

Python 3 Django 3 Python CI codecov Code style: black

Django global query strings allows adding query strings (query params) globally.
The app looks for all the <a> tags in a html content thanks to BeautifulSoup.

There are two ways of using the app. Each way can be used separately or conjointly:

  • Using the middleware GlobalQueryStringsMiddleware
  • Using the utility function add_query_strings_to_links

Installation

Install with pip:

pip install django-global-query-strings

Setup

In order to make django-global-query-strings works, you'll need to follow the steps below:

Settings

First, you need to add the app and the middleware to your settings. The middleware is optional depending on your usage:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.sessions',
    'django.contrib.messages',

    'global_query_strings',
    ...
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    
    'global_query_strings.middleware.GlobalQueryStringsMiddleware',
    ...
)

Settings

Here is the list of all the settings with their default values:

GLOBAL_QUERY_STRINGS_IGNORE_URLS = []
GLOBAL_QUERY_STRINGS_IGNORE_RELATIVE_PATHS = False
GLOBAL_QUERY_STRINGS_PARAMS = {}
GLOBAL_QUERY_STRINGS_EXCLUDE_PATHS_LIST = []

GLOBAL_QUERY_STRINGS_IGNORE_URLS

GLOBAL_QUERY_STRINGS_IGNORE_URLS takes a list of domain name or urls e.g.: ["example.com", "https://www.foo.org"]. When the html parser finds those values, the global query strings won't be added to the urls.

GLOBAL_QUERY_STRINGS_IGNORE_RELATIVE_PATHS

GLOBAL_QUERY_STRINGS_IGNORE_RELATIVE_PATHS is a boolean. When set to True, the parser will ignore relative paths.

GLOBAL_QUERY_STRINGS_PARAMS

GLOBAL_QUERY_STRINGS_PARAMS takes a dictionary of global query strings to set e.g.: {"foo": "bar", "lorem": "ipsum"}. The query strings found in GLOBAL_QUERY_STRINGS_PARAMS would be replaced / added to the urls found by the parser.

GLOBAL_QUERY_STRINGS_EXCLUDE_PATHS_LIST

GLOBAL_QUERY_STRINGS_EXCLUDE_PATHS_LIST is a list of paths to exclude that takes place in the middleware only. All the paths that starts with any elements of the list will bypass the middleware. e.g.: ["/admin"]

Usage

Here is an example of input / output with the following settings:

GLOBAL_QUERY_STRINGS_IGNORE_URLS = ["example.com", "https://www.foo.org"]
GLOBAL_QUERY_STRINGS_IGNORE_RELATIVE_PATHS = True
GLOBAL_QUERY_STRINGS_PARAMS = {"foo": "bar", "lorem": "ipsum"}

Input:

<html lang="en">
    <body>
        <a href="https://www.foo.org">Lorem Ipsum</a> is simply dummy text of the printing and typesetting industry.
        <a href="https://foo.org">Lorem Ipsum</a> has been the industry's standard dummy text ever since the 1500s,
        when an unknown printer took a galley of type and scrambled it to make a type specimen book.
        It has survived not only <a href="https://www.bar.com">five centuries</a>, but also the leap into electronic
        typesetting, <a href="/lorem/ipsum">remaining essentially</a> unchanged.
        It was popularised in the 1960s with the release of <a href="https://www.bar.com?example=true">Letraset sheets</a>
        containing Lorem Ipsum passages, and more recently with desktop <a href="https://www.foo.org?foo=ipsum">publishing software</a>
        like Aldus PageMaker including versions of Lorem Ipsum.
    </body>
</html>

Output:

<html lang="en">
    <body>
        <a href="https://www.foo.org">Lorem Ipsum</a> is simply dummy text of the printing and typesetting industry.
        <a href="https://foo.org?foo=bar&lorem=ipsum">Lorem Ipsum</a> has been the industry's standard dummy text ever since the 1500s,
        when an unknown printer took a galley of type and scrambled it to make a type specimen book.
        It has survived not only <a href="https://www.bar.com?foo=bar&lorem=ipsum">five centuries</a>, but also the leap into electronic
        typesetting, <a href="/lorem/ipsum">remaining essentially</a> unchanged.
        It was popularised in the 1960s with the release of <a href="https://www.bar.com?example=true&foo=bar&lorem=ipsum">Letraset sheets</a>
        containing Lorem Ipsum passages, and more recently with desktop <a href="https://www.foo.org?foo=bar&lorem=ipsum">publishing software</a>
        like Aldus PageMaker including versions of Lorem Ipsum.
    </body>
</html>

Tests

Testing is managed by pytest. Required package for testing can be installed with:

pip install -r test_requirements.txt

To run testing locally:

pytest

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-global-query-strings-0.4.0.tar.gz (5.2 kB view hashes)

Uploaded Source

Built Distribution

Supported by

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