Skip to main content

Django RemixIcon

PyPI version Python versions Django versions License Documentation Status

A simple Django package for integrating RemixIcon with Django admin and templates. Provides seamless icon selection with autocomplete, preview functionality, and template tags for easy icon rendering.

✨ Features

  • 🎯 Simple Integration: Minimal configuration required
  • 🔍 Autocomplete Widget: Fast icon search in Django admin
  • 👁️ Live Preview: See icons as you type
  • 📋 Template Tags: Easy icon rendering in templates
  • 📱 Responsive: Works on mobile and desktop
  • ⚡ Performance: Efficient search and caching
  • 🎨 Customizable: Style to match your design
  • 🔧 Inline Support: Works with Django admin inlines
  • 🌙 Dark Mode: Supports dark themes

🚀 Quick Start

Installation

pip install django-remix-icon

Django Setup

Add to your INSTALLED_APPS:

INSTALLED_APPS = [
    # ... your other apps
    'django_remix_icon',
]

Include URLs in your project:

# urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('remix-icon/', include('django_remix_icon.urls')),
    # ... your other URLs
]

Basic Usage

In your models:

from django.db import models
from django_remix_icon.fields import IconField

class MenuItem(models.Model):
    name = models.CharField(max_length=100)
    icon = IconField()  # Simple icon field
    url = models.URLField()

class Category(models.Model):
    title = models.CharField(max_length=100)
    icon = IconField(blank=True, null=True)  # Optional icon

In your templates:

{% load remix_icon_tags %}

<!DOCTYPE html>
<html>
<head>
    <title>My Site</title>
    {% remix_icon_css %}  <!-- Include RemixIcon CSS -->
</head>
<body>
    <!-- Simple icon rendering -->
    <h1>{% remix_icon 'ri-home-line' %} Welcome</h1>

    <!-- Using model fields -->
    {% for item in menu_items %}
        <a href="{{ item.url }}">
            {% remix_icon item.icon %}
            {{ item.name }}
        </a>
    {% endfor %}

    <!-- With custom styling -->
    {% remix_icon 'ri-heart-fill' class='text-red-500' size='24' %}
</body>
</html>

Admin Integration:

# admin.py - No additional configuration needed!
from django.contrib import admin
from .models import MenuItem

@admin.register(MenuItem)
class MenuItemAdmin(admin.ModelAdmin):
    list_display = ('name', 'icon', 'url')
    # IconField automatically provides autocomplete widget

📖 Documentation

Complete documentation is available at django-remix-icon.readthedocs.io

🎭 Template Tags

Django RemixIcon provides several template tags for flexible icon rendering:

{% load remix_icon_tags %}

<!-- Basic icon -->
{% remix_icon 'ri-star-line' %}

<!-- Icon with attributes -->
{% remix_icon 'ri-heart-fill' class='love-icon' size='20' %}

<!-- Icon with text -->
{% remix_icon_with_text 'ri-download-line' 'Download' class='btn' %}

<!-- Conditional rendering -->
{% if item.icon|is_remix_icon %}
    {% remix_icon item.icon %}
{% endif %}

<!-- Get icon lists -->
{% remix_icon_list category='user' limit=10 as user_icons %}
{% for icon in user_icons %}
    {% remix_icon icon %}
{% endfor %}

🎨 Admin Widget Features

The Django admin integration provides:

  • Fast Search: Find icons quickly by typing
  • Smart Filtering: Matches icon names and categories
  • Keyboard Navigation: Use arrow keys and Enter

Live Preview

  • Visual Feedback: See icons as you select them
  • Icon Information: Shows icon name and category
  • Responsive Design: Works on all screen sizes

Django Integration

  • No Configuration: Works out of the box
  • Inline Support: Works with TabularInline and StackedInline
  • Validation: Ensures only valid icons are selected

🔧 Customization

Custom Widget Styling

/* Custom styles for your theme */
.remix-icon-widget {
    max-width: 500px;
}

.icon-search-input {
    border-radius: 8px;
    padding: 12px 16px;
}

.icon-preview {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    border-radius: 8px;
}

Custom Form Field

from django import forms
from django_remix_icon.fields import IconFormField

class CustomForm(forms.Form):
    icon = IconFormField(required=False)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['icon'].widget.attrs.update({
            'class': 'my-custom-icon-widget'
        })

📱 Examples

Navigation Menu

# models.py
class NavigationItem(models.Model):
    title = models.CharField(max_length=100)
    icon = IconField()
    url = models.URLField()
    order = models.PositiveIntegerField(default=0)

    class Meta:
        ordering = ['order']
<!-- template.html -->
{% load remix_icon_tags %}

<nav class="main-nav">
    {% for item in navigation_items %}
        <a href="{{ item.url }}" class="nav-item">
            {% remix_icon item.icon class='nav-icon' %}
            <span>{{ item.title }}</span>
        </a>
    {% endfor %}
</nav>

Dashboard Cards

# models.py
class DashboardCard(models.Model):
    title = models.CharField(max_length=100)
    icon = IconField()
    description = models.TextField()
    value = models.CharField(max_length=50)
    color = models.CharField(max_length=20, default='blue')
<!-- dashboard.html -->
{% for card in dashboard_cards %}
    <div class="dashboard-card card-{{ card.color }}">
        <div class="card-icon">
            {% remix_icon card.icon size='32' %}
        </div>
        <div class="card-content">
            <h3>{{ card.title }}</h3>
            <p class="card-value">{{ card.value }}</p>
            <p class="card-description">{{ card.description }}</p>
        </div>
    </div>
{% endfor %}

Status Indicators

{% for task in tasks %}
    <div class="task-item">
        {% if task.completed %}
            {% remix_icon 'ri-check-circle-fill' class='text-green-500' %}
        {% elif task.in_progress %}
            {% remix_icon 'ri-time-line' class='text-blue-500' %}
        {% else %}
            {% remix_icon 'ri-circle-line' class='text-gray-400' %}
        {% endif %}
        <span>{{ task.name }}</span>
    </div>
{% endfor %}

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

# Clone the repository
git clone https://github.com/brktrlw/django-remix-icon.git
cd django-remix-icon

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -e .[dev]

Quick Contribution Guide

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run code formatting (black, isort, flake8)
  5. Commit your changes (git commit -am 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

📋 Requirements

  • Python: 3.8+
  • Django: 3.2+
  • Browser: Chrome 60+, Firefox 55+, Safari 12+, Edge 79+

🔄 Compatibility

Django Version Python Version Status
5.0 3.10, 3.11, 3.12 ✅ Supported
4.2 (LTS) 3.8, 3.9, 3.10, 3.11, 3.12 ✅ Supported
4.1 3.8, 3.9, 3.10, 3.11 ✅ Supported
4.0 3.8, 3.9, 3.10, 3.11 ✅ Supported
3.2 (LTS) 3.8, 3.9, 3.10, 3.11 ✅ Supported

🏗️ Architecture

django-remix-icon/
├── django_remix_icon/
│   ├── fields.py          # IconField model field
│   ├── widgets.py         # Admin widgets
│   ├── views.py           # AJAX search views
│   ├── templatetags/      # Template tags
│   ├── static/            # CSS and JavaScript
│   └── templates/         # Widget templates
├── docs/                  # Documentation

🎯 Philosophy

Django RemixIcon follows these principles:

  • Simplicity: Minimal configuration, maximum functionality
  • Performance: Efficient search and rendering
  • Flexibility: Customizable but with sensible defaults
  • Integration: Seamless Django admin experience
  • Accessibility: Keyboard navigation and screen reader support

🔍 FAQ

Q: How many icons are available? A: Over 2,000 icons from RemixIcon v4.7.0, covering all major categories.

Q: Does it work with Django admin inlines? A: Yes! The widget works perfectly with both TabularInline and StackedInline.

Q: Can I customize the widget appearance? A: Absolutely! The widget includes CSS classes for easy customization.

Q: Is there a performance impact? A: Minimal. The widget uses debounced search and efficient caching.

Q: Does it work on mobile? A: Yes, the widget is fully responsive and touch-friendly.

📄 License

This project is licensed under the MIT License.

🙏 Acknowledgments

📈 Changelog

See CHANGELOG.md for a list of changes and migration guides.


⭐ Star this repo if you find it useful!

Made with ❤️ for the Django community

Metadata

Release files for django-remix-icon 2.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-remix-icon 2.0.2
File Size Uploaded Provenance Actions
django_remix_icon-2.0.2.tar.gz 82.0 kB Without provenance Details for django_remix_icon-2.0.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for django-remix-icon 2.0.2
File Interpreter ABI Platform Actions
django_remix_icon-2.0.2-py3-none-any.whl Python 3 none any Details for django_remix_icon-2.0.2-py3-none-any.whl

Total release size: 126.2 kB

Release files / django_remix_icon-2.0.2.tar.gz

Download URL django_remix_icon-2.0.2.tar.gz
Size 82.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8b5d7ede37e814e9861244e1da47d8d307001a78856aa0811e85f0a39812d1c2
BLAKE2b-256 checksum
How to use checksums
113bc6ae5f7db779ca04216c1a2330965a89c01b20480ba4a6e33d9d10c89371
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / django_remix_icon-2.0.2-py3-none-any.whl

Download URL django_remix_icon-2.0.2-py3-none-any.whl
Size 44.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dc76581ba8d4c39c1e300b5136e5be0be5e3c71009465eebb02b87ad5ff4cd5f
BLAKE2b-256 checksum
How to use checksums
9066579af8b781788b174acf7ca86c484219bf8b65659cb5b37b416fa534a1c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Security for django-remix-icon 2.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page