Quick Start Guide
This guide will help you get started with Django RemixIcon in minutes.
Creating Your First Icon Field
Create a model with an IconField:
# models.py
from django.db import models
from django_remix_icon.fields import IconField
class MenuItem(models.Model):
name = models.CharField(max_length=100)
url = models.URLField()
icon = IconField(blank=True, null=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
class Meta:
verbose_name = "Menu Item"
verbose_name_plural = "Menu Items"
Register the model in admin:
# admin.py
from django.contrib import admin
from .models import MenuItem
@admin.register(MenuItem)
class MenuItemAdmin(admin.ModelAdmin):
list_display = ('name', 'url', 'icon', 'is_active')
list_filter = ('is_active',)
search_fields = ('name',)
Create and run migrations:
python manage.py makemigrations
python manage.py migrate
Using in Templates
Load the template tags:
{% load remix_icon_tags %}
Include RemixIcon CSS (add this once in your base template):
<!DOCTYPE html>
<html>
<head>
<title>My Site</title>
{% remix_icon_css %}
</head>
<body>
<!-- Your content -->
</body>
</html>
Render icons in your templates:
<!-- Simple icon rendering -->
{% remix_icon 'ri-home-line' %}
<!-- Using model field -->
{% for item in menu_items %}
<div class="menu-item">
{% remix_icon item.icon %}
<a href="{{ item.url }}">{{ item.name }}</a>
</div>
{% endfor %}
<!-- With custom attributes -->
{% remix_icon 'ri-heart-fill' class='text-red-500' size='24' %}
Working with Inline Models
The IconField works seamlessly with Django admin inline models:
# models.py
class NavigationMenu(models.Model):
name = models.CharField(max_length=100)
class NavigationMenuItem(models.Model):
menu = models.ForeignKey(NavigationMenu, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
icon = IconField()
order = models.PositiveIntegerField(default=0)
# admin.py
class NavigationMenuItemInline(admin.TabularInline):
model = NavigationMenuItem
extra = 1
fields = ('title', 'icon', 'order')
@admin.register(NavigationMenu)
class NavigationMenuAdmin(admin.ModelAdmin):
inlines = [NavigationMenuItemInline]
Complete Example
Here’s a complete working example for a blog with icon categories:
models.py:
from django.db import models
from django_remix_icon.fields import IconField
class Category(models.Model):
name = models.CharField(max_length=50)
icon = IconField(help_text="Choose an icon for this category")
description = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "Categories"
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
admin.py:
from django.contrib import admin
from .models import Category, Post
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'icon', 'created_at')
search_fields = ('name',)
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'created_at')
list_filter = ('category', 'created_at')
search_fields = ('title', 'content')
Template (blog/category_list.html):
{% load remix_icon_tags %}
<!DOCTYPE html>
<html>
<head>
<title>Blog Categories</title>
{% remix_icon_css %}
<style>
.category-card {
border: 1px solid #ddd;
border-radius: 8px;
padding: 20px;
margin: 10px;
display: inline-block;
text-align: center;
min-width: 200px;
}
.category-icon {
font-size: 48px;
color: #007cba;
margin-bottom: 10px;
}
</style>
</head>
<body>
<h1>Blog Categories</h1>
<div class="categories">
{% for category in categories %}
<div class="category-card">
<div class="category-icon">
{% remix_icon category.icon size='48' %}
</div>
<h3>{{ category.name }}</h3>
<p>{{ category.description }}</p>
<small>{{ category.post_set.count }} posts</small>
</div>
{% endfor %}
</div>
</body>
</html>
views.py:
from django.shortcuts import render
from .models import Category
def category_list(request):
categories = Category.objects.all()
return render(request, 'blog/category_list.html', {
'categories': categories
})
Testing the Setup
Start the development server:
python manage.py runserver
Visit the Django admin at
http://localhost:8000/admin/Create a new category: - Click “Add” next to Categories - Enter a name - Click in the Icon field - you should see an autocomplete widget - Start typing “home” and select an icon like “ri-home-line” - Save the category
View your categories in the frontend by visiting your category list view
Expected Results
In Django Admin: You should see an icon field with autocomplete functionality and icon preview
In Templates: Icons should render as proper RemixIcon symbols
Autocomplete: Should work smoothly with search functionality
Inline Models: Should work identically to regular form fields
Next Steps
Now that you have the basics working, explore:
Detailed Usage - Detailed usage instructions
Template Tags - All available template tags and their options
Customization - Customizing the widget appearance and behavior