Anda tidak perlu repot membuat slug di Django. Terapkan pembuatan slug otomatis untuk menghemat waktu dan merampingkan alur kerja Anda.

Sebagai pengembang web, mengoptimalkan pengalaman pengguna aplikasi web Anda sangatlah penting. Untuk meningkatkan pengalaman pengguna dan keterlihatan mesin telusur, gunakan URL ramah pengguna dengan slug di Django. Membuat URL dengan slug semudah menulis fungsi, memungkinkan Anda menghasilkan URL yang ringkas dan deskriptif yang mudah dipahami oleh pengguna dan mesin telusur. Ini meningkatkan kegunaan dan aksesibilitas sambil meningkatkan peringkat mesin pencari.

Contoh kode yang digunakan dalam artikel ini dapat ditemukan di sini repositori GitHub.

Membuat Proyek Django

Django menyediakan beberapa metode untuk membuat slug dan menggunakannya di situs web Anda. Untuk mengilustrasikan berbagai cara mengimplementasikan slug, tutorial ini akan memandu Anda membangun aplikasi web blog sederhana.

Sebelum menyiapkan proyek Django, membuat dan mengaktifkan lingkungan virtual

instagram viewer
untuk menginstal dependensi yang diperlukan. Setelah mengaktifkan lingkungan virtual Anda, ikuti langkah-langkah berikut untuk menyiapkan proyek Anda:

  • Instal Django dengan menggunakan perintah pip di baris perintah Anda:
pip instal django
  • Membuat proyek dengan menggunakan django-admin kegunaan. Tutorial ini akan digunakan project_core sebagai nama proyek.
django-admin startproject project_core .
  • Buat aplikasi bernama resep.
resep python manage.py startapp
  • Tambahkan aplikasi Anda ke aplikasi yang terinstal di proyek Anda pengaturan.py mengajukan.
INSTALLED_APPS = [
'...'
'resep',
]
  • Jalankan aplikasi Anda dengan mengetikkan perintah berikut di alat baris perintah Anda:
python mengelola.py runserver
  • Navigasi ke http://127.0.0.1:8000/ di peramban Anda. Anda harus melihat halaman ini:
  • Konfigurasikan pola URL di proyek Anda urls.py mengajukan
dari django.urls impor jalan, termasuk

pola url = [
'...',
jalur('', termasuk('resep.url'))
]

Membuat Slug di Django

Untuk menghasilkan slug di Django, Anda perlu menyertakan bidang slug di model Anda. Ikuti langkah-langkah ini untuk membuat slug di Django.

Buat Model

Di Anda model.py file, buat model baru dan sertakan bidang slug. Ini contohnya:

kelasresep(model. Model):
nama = model. CharField (max_length=225, kosong=PALSU, nol=PALSU)
bahan = model. TextField (kosong=PALSU, nol=PALSU)
instruksi = model. TextField (kosong=PALSU, nol=PALSU)
tanggal_dibuat = model. DateTimeField (auto_now=BENAR)
siput = model. SlugField (null = BENAR, kosong=BENAR, unik=BENAR)

Pada contoh di atas, model resep berisi bidang bernama siput. Itu siput bidang memiliki atribut, batal Dan kosong mulai BENAR.

Terapkan Migrasi ke Model Anda

Setelah membuat model, Anda harus menjalankan perintah berikut di alat baris perintah untuk membuat tabel di database Anda:

python manage.py makemigrations && python manage.py migrasi

Perintah di atas pertama-tama akan menghasilkan file migrasi dan kemudian memperbarui database dengan menjalankan instruksi di dalam file migrasi.

Tambahkan Data ke Basis Data Anda

Daftarkan model Anda dengan mengetik berikut ini di admin.py mengajukan:

dari django.contrib impor admin
dari .model impor resep

admin.site.register (Resep)

Selanjutnya, buka alat baris perintah Anda dan buat a pengguna super untuk panel admin Anda dengan menjalankan perintah ini:

python kelola.py buatpengguna super

Perintah di atas akan membawa Anda melalui langkah-langkah yang digambarkan dalam gambar ini:

Setelah membuat a pengguna super, mulai server lokal Anda dengan perintah berikut:

python mengelola.py runserver

Setelah server Anda mulai, Anda harus menavigasi ke http://127.0.0.1:8000/admin/, masuk dengan detail yang Anda gunakan untuk membuat pengguna super, dan menambahkan beberapa resep secara manual ke database Anda. Anda harus memperhatikan bidang siput.

Buat Tampilan untuk Aplikasi Anda

Bukalah views.py file dan buat dua tampilan untuk aplikasi Anda. Tampilan pertama hanya akan menampilkan ikhtisar resep Anda, sedangkan tampilan kedua akan memberikan rincian lebih lanjut tentang setiap resep. Anda dapat menggunakan tampilan ini di proyek Anda:

dari django.shortcuts impor render, get_object_or_404
dari .model impor resep

# Tampilan daftar untuk resep
defdaftar_resep(meminta):
resep = Resep.objek.semua()
kembali memberikan (permintaan, 'resep/daftar_resep.html', {"resep":resep})

# Tampilan detail untuk setiap resep
defdetail_resep(permintaan, resep_slug):
resep = get_object_or_404(Resep, slug=resep_slug)
kembali memberikan (permintaan, 'resep/resep_detail.html', {'resep': resep})

Dalam cuplikan kode di atas, file daftar_resep view mengembalikan daftar semua resep ke template. Di sisi lain, detail_resep view mengembalikan satu resep ke template. Tampilan ini mengambil parameter tambahan yang disebut resep_slug yang digunakan untuk mendapatkan siput untuk resep tertentu.

Konfigurasikan Pola URL untuk Tampilan Anda

Di direktori aplikasi Anda (atau resep folder), buat file bernama urls.py untuk menambahkan jalur URL untuk aplikasi Anda. Ini contohnya:

dari django.urls impor jalur
dari .view impor daftar_resep, detail_resep

pola url = [
jalur('', daftar_resep, nama='resep-rumah'),
jalur('resep//', detail_resep, nama='detail_resep'),
]

Dalam cuplikan kode di atas, jalur kedua memasukkan slug ke dalam URL untuk halaman tersebut.

Buat Template untuk Aplikasi Anda

Untuk menampilkan resep di browser, buat template untuk tampilan Anda. Satu template harus untuk daftar_resep lihat sementara yang lain harus untuk detail_resep melihat. Untuk menggunakan slug di template Anda, ikuti format ini, {% url 'view_name' resep.slug %}. Berikut adalah dua contoh yang dapat Anda gunakan dalam kode Anda:

 resep/resep_daftar.html 
{% memperluas 'base.html' %}

{% blokir konten %}
<h1kelas="pusat teks my-5">Reseph1>
<tengah>
<ulkelas="daftar-grup w-75">
{% untuk resep dalam resep %}
<likelas="daftar-grup-item saya-3">
<h2kelas="mb-3">
<Ahref="{% url 'recipe_detail' resep.slug %}">
{{ resep.nama }}
A>
h2>
<Pkelas="w-50">
Bahan: {{ resep. bahan }}
P>
<Pkelas="teks-dibisukan">
Dibuat: {{ resep.date_created }}
P>
li>
{% kosong %}
<likelas="daftar-grup-item">Tidak ada resep yang ditemukan.li>
{% akhir untuk %}
ul>
tengah>
{% blok akhir %}

Template HTML di atas akan mencantumkan semua resep di database dan tampilan Anda Tidak ada resep yang ditemukan jika tidak ada resep. Ini menggunakan kelas Bootstrap untuk penataan. Anda dapat mempelajari caranya gunakan Bootstrap dengan Django. Template di atas akan terlihat seperti ini di browser:

 resep/resep_detail.html 
{% memperluas 'base.html' %}

{% blokir konten %}
<tengah>
<divkelas="w-75">
<h1kelas="mt-5 mb-4">{{ resep.nama }}h1>
<h3>Bahan-bahanh3>
<P>{{ resep. bahan }}P>
<h3>Instruksih3>
<P>{{ resep.instruksi }}P>
<Pkelas="teks-dibisukan">Dibuat: {{ resep.date_created }}P>
div>
tengah>
{% blok akhir %}

Template HTML di atas menampilkan detail tentang resep tertentu. Di browser, halaman di atas akan terlihat seperti ini:

Anda akan melihat bahwa URL sekarang berisi slug apa pun yang Anda tambahkan di basis data untuk setiap resep. Jika Anda tidak memahami cara kerja sistem template, Anda harus mempelajarinya terlebih dahulu pewarisan templat di Django Dan Arsitektur MVT Django.

Secara otomatis Menghasilkan Slug di Django

Dengan siput, yang Anda inginkan adalah membuatnya secara otomatis berdasarkan bidang dalam model Anda. Untuk melakukan ini, Anda harus memodifikasi menyimpan() dalam model Anda dan tentukan aturan Anda sendiri sebelum objek disimpan ke database. Berikut adalah contoh sederhana yang dapat Anda tambahkan ke kelas model Anda:

# impor slugify
dari django.template.defaultfilters impor slugify

defmenyimpan(self, *args, **kwargs):
jikabukan self.slug:
self.slug = slugify (nama.diri)
super().save(*args, **kwargs)

Fungsi di atas pertama-tama memeriksa apakah ada slug untuk objek model. Jika tidak ada siput, itu menggunakan slugify fungsi untuk menghasilkan satu dari bidang nama dalam model. Setelah mengesampingkan menyimpan() metode, buka panel admin Anda dan tambahkan beberapa resep. Kali ini, Anda tidak perlu mengisi kolom slug karena kolom slug akan terisi secara otomatis setelah Anda menyimpan resep.

Jika Anda membuka halaman detail resep yang baru ditambahkan, Anda akan melihat bahwa URL menggunakan nama resep sebagai slug.

Terkadang, Anda memiliki banyak resep dengan nama yang sama dan itu akan menyebabkan kesalahan pada slug Anda. Anda dapat memperbaikinya dengan menambahkan elemen unik ke slug Anda seperti tanggal pembuatan. Berikut contoh sederhananya:

self.slug = slugify (self.name + "-" + str (self.date_created))

Gunakan Slug untuk Meningkatkan Pengalaman URL

Berbeda dengan orang tua yang baik pk, slugs memberikan banyak manfaat termasuk fleksibilitas dan portabilitas karena tidak terikat dengan pengidentifikasi URL tertentu seperti kunci utama. Oleh karena itu, jika Anda mengubah struktur database atau memigrasikan data, Anda masih dapat mempertahankan URL yang konsisten. Siput juga meningkatkan keramahan SEO.