Python ile Slug Oluşturma: Django, Flask ve Vanilla Python Rehberi
Python'da URL slug oluşturmanın tüm yöntemlerini öğrenin. Django slugify, python-slugify kütüphanesi ve özel fonksiyonlarla SEO dostu URL'ler oluşturun.
Python'da Slug Nedir ve Neden Önemlidir?
Slug, bir URL'nin okunabilir ve SEO dostu kısmıdır. Python'da slug oluşturmak, web uygulamalarınızın arama motoru optimizasyonu için kritik öneme sahiptir.
Yöntem 1: Vanilla Python ile Slug Oluşturma
Herhangi bir kütüphane kullanmadan temel slug fonksiyonu:
import re
import unicodedata
def slugify(text):
# Unicode karakterleri ASCII'ye dönüştür
text = unicodedata.normalize('NFKD', text)
text = text.encode('ascii', 'ignore').decode('ascii')
# Küçük harfe çevir
text = text.lower()
# Alfanümerik olmayan karakterleri tire ile değiştir
text = re.sub(r'[^a-z0-9]+', '-', text)
# Baş ve sondaki tireleri kaldır
text = text.strip('-')
# Birden fazla tireyi tek tireye indir
text = re.sub(r'-+', '-', text)
return text
# Kullanım
print(slugify("Merhaba Dünya! Bu bir test."))
# Çıktı: merhaba-dunya-bu-bir-testYöntem 2: python-slugify Kütüphanesi
En popüler slug kütüphanesi olan python-slugify'ı kullanmak:
# Kurulum
pip install python-slugify
# Kullanım
from slugify import slugify
# Temel kullanım
slug = slugify("Merhaba Dünya!")
print(slug) # merhaba-dunya
# Türkçe karakterler için
slug = slugify("Şeker Ördek Çığlık")
print(slug) # seker-ordek-ciglik
# Maksimum uzunluk belirleme
slug = slugify("Bu çok uzun bir başlık olabilir", max_length=20)
print(slug) # bu-cok-uzun-bir
# Kelime sınırında kesme
slug = slugify("Bu çok uzun bir başlık", max_length=15, word_boundary=True)
print(slug) # bu-cok-uzunYöntem 3: Django'nun Yerleşik slugify Fonksiyonu
Django projelerinde yerleşik slugify kullanımı:
from django.utils.text import slugify
# Temel kullanım
slug = slugify("Hello World")
print(slug) # hello-world
# Unicode desteği ile
slug = slugify("Привет мир", allow_unicode=True)
print(slug) # привет-мир
# Model'de otomatik slug oluşturma
from django.db import models
from django.utils.text import slugify
class BlogPost(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, unique=True, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)Yöntem 4: Flask Uygulamalarında Slug
Flask projelerinde slug oluşturma:
from flask import Flask
from slugify import slugify
from werkzeug.utils import secure_filename
app = Flask(__name__)
def generate_slug(title):
return slugify(title, max_length=60)
# URL route'unda kullanım
@app.route('/blog/')
def blog_post(slug):
post = Post.query.filter_by(slug=slug).first_or_404()
return render_template('post.html', post=post)
# SQLAlchemy model'i
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200))
slug = db.Column(db.String(200), unique=True)
def __init__(self, title):
self.title = title
self.slug = generate_slug(title)Türkçe Karakterler İçin Özel Çözüm
Türkçe karakterleri doğru şekilde dönüştüren fonksiyon:
def turkish_slugify(text):
# Türkçe karakter dönüşüm tablosu
tr_map = {
'ş': 's', 'Ş': 's',
'ğ': 'g', 'Ğ': 'g',
'ü': 'u', 'Ü': 'u',
'ö': 'o', 'Ö': 'o',
'ı': 'i', 'İ': 'i',
'ç': 'c', 'Ç': 'c'
}
# Türkçe karakterleri dönüştür
for tr_char, en_char in tr_map.items():
text = text.replace(tr_char, en_char)
# Standart slugify işlemi
text = text.lower()
text = re.sub(r'[^a-z0-9]+', '-', text)
text = text.strip('-')
text = re.sub(r'-+', '-', text)
return text
# Test
print(turkish_slugify("Türkiye'nin En Güzel Şehirleri"))
# Çıktı: turkiyenin-en-guzel-sehirleriBenzersiz Slug Oluşturma
Veritabanında çakışmayı önlemek için benzersiz slug:
def generate_unique_slug(model_class, title, slug_field='slug'):
base_slug = slugify(title, max_length=50)
slug = base_slug
counter = 1
while model_class.objects.filter(**{slug_field: slug}).exists():
slug = f"{base_slug}-{counter}"
counter += 1
return slug
# Kullanım
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = generate_unique_slug(Article, self.title)
super().save(*args, **kwargs)Performans İpuçları
- Slug'ı bir kez oluşturun: Her istekte yeniden hesaplamayın
- Veritabanında indexleyin: Slug alanına index ekleyin
- Cache kullanın: Sık erişilen slug'ları önbelleğe alın
- Uzunluk sınırı koyun: 60 karakteri geçmeyin
Sonuç
Python'da slug oluşturmak için birçok yöntem vardır. Projenizin ihtiyaçlarına göre vanilla Python, python-slugify veya framework'ünüzün yerleşik fonksiyonlarını kullanabilirsiniz. Türkçe ve diğer Latin dışı karakterler için özel dönüşüm fonksiyonları eklemeyi unutmayın.