Skip to main content

A collection of Django templatetags and middleware.

Project description

django-vrot

A collection of Django templatetags and middleware for common web development tasks.

Features

  • Local timezone display: Automatically display dates and times in the visitor's local timezone
  • Active link detection: Highlight active menu items based on current URL
  • Query parameter management: Easily modify query parameters while preserving others
  • Template utilities: Access dictionary items dynamically and format time displays

Installation

uv add django-vrot

Quick Start

  1. Add vrot to your INSTALLED_APPS:
INSTALLED_APPS = [
    # ...
    "vrot",
]
  1. For timezone support, add the middleware to your MIDDLEWARE:
MIDDLEWARE = [
    # ...
    "vrot.middleware.TimezoneMiddleware",
]
  1. Include the JavaScript file in your base template (only needed for timezone features):
{% load static %}
<script src="{% static 'vrot/timezone.js' %}" defer></script>

Usage

Template Tags

Load the template tags in your templates:

{% load vrot %}

localtime - Display times in user's timezone

Renders a time element that will be converted to the user's local timezone via JavaScript:

{{ comment.created_at|localtime }}

Output:

<time datetime="2024-05-19T10:34:00+02:00" class="local-time">May 19, 2024 at 10:34 AM</time>

humantime - Human-friendly time display

Shows relative time for recent dates:

{{ comment.created_at|humantime }}

Outputs:

  • "2 hours ago" (for times less than 24 hours ago)
  • "Yesterday at 3:45 PM" (for times 24-48 hours ago)
  • Full date display (for older times)

active_link - Highlight active menu items

<li class="{% active_link 'blog:index' %}">
    <a href="{% url 'blog:index' %}">Blog</a>
</li>

Parameters:

  • viewname: The name of the view (including namespace, if any)
  • css_class: CSS class to apply when active (default: "menu-active")
  • css_inactive_class: CSS class when inactive (default: "")
  • strict: If True, requires exact path match (default: False)

query_param_replace - Preserve query parameters

Useful for pagination while maintaining filters:

<a href="{% query_param_replace page=page_obj.next_page_number %}">Next Page</a>

This preserves existing query parameters (like filters) while updating the page number.

getitem - Access dictionary/list items

Access dictionary values with dynamic keys:

{{ my_dict|getitem:user_provided_key }}

Middleware

TimezoneMiddleware

Automatically activates the user's timezone based on a cookie set by the JavaScript code. This allows Django to render times in the user's local timezone server-side.

The middleware reads the timezone cookie and activates the corresponding timezone for the duration of the request.

How Local Timezone Display Works

  1. The included JavaScript sets a cookie with the user's timezone
  2. The TimezoneMiddleware reads this cookie and activates the timezone in Django
  3. The localtime filter renders times with proper timezone information
  4. The JavaScript converts any remaining times to the user's local format

For more details, see: https://www.loopwerk.io/articles/2025/django-local-times/

Requirements

  • Django >= 3.2
  • Python >= 3.9

License

MIT License - see LICENSE file for details.

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_vrot-0.3.0.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

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

django_vrot-0.3.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file django_vrot-0.3.0.tar.gz.

File metadata

  • Download URL: django_vrot-0.3.0.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.3

File hashes

Hashes for django_vrot-0.3.0.tar.gz
Algorithm Hash digest
SHA256 56edfed16b8e866077982538b02aa77e6832906b905b8fac6ee698ab30b863f6
MD5 e2ea13c3717ba4a0a02e56bbf9fec069
BLAKE2b-256 72db992c796ad1ff97dc4a2b4f38db20919d642a5752ce6a94ca1c1756afcee8

See more details on using hashes here.

File details

Details for the file django_vrot-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_vrot-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a86702d859a5738026c98e0b0a54a03f84792310c04750d01c5f98063a1a61e5
MD5 e2a43755ea1e303fdcab99a9ec72220c
BLAKE2b-256 c490a1372926875ad1419cb36564d7e421e2b79b5f33fd50d8c61fd8b5a7ac99

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