django slug int url mapping

  1. Define a model with a SlugField:
from django.db import models

class YourModel(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True)
    # ... other fields ...
  1. Install Django's slugify to create slugs:
pip install django
  1. In your views, create a function to generate the slug:
from django.utils.text import slugify

def generate_slug(title):
    return slugify(title)
  1. Override the save method in your model to generate the slug before saving:
from django.db import models
from django.utils.text import slugify

class YourModel(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True)
    # ... other fields ...

    def save(self, args, *kwargs):
        if not self.slug:
            self.slug = generate_slug(self.title)
        super().save(args, *kwargs)
  1. Create a URL pattern in your urls.py file:
from django.urls import path
from .views import YourModelDetailView

urlpatterns = [
    path('your-model/<slug:slug>/', YourModelDetailView.as_view(), name='your_model_detail'),
    # ... other patterns ...
]
  1. In your views, use the slug to retrieve the object:
from django.shortcuts import get_object_or_404
from django.views.generic import DetailView
from .models import YourModel

class YourModelDetailView(DetailView):
    model = YourModel
    template_name = 'your_model_detail.html'

    def get_object(self, queryset=None):
        return get_object_or_404(YourModel, slug=self.kwargs['slug'])
  1. In your template, use the slug in URLs:
<a href="{% url 'your_model_detail' slug=your_model_instance.slug %}">Detail</a>