Django Views dan URLs
URLs dalam Django
URLs menentukan bagaimana pengguna mengakses berbagai bagian website. Di Django, URLs diatur dalam file urls.py
.
Konfigurasi URLs Project
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')), # URLs dari aplikasi myapp
]
Konfigurasi URLs Aplikasi
Buat file baru urls.py
dalam folder aplikasi:
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about/', views.about, name='about'),
path('products/<int:id>/', views.product_detail, name='product_detail'),
]
Views dalam Django
Views adalah fungsi atau class yang memproses request dan mengembalikan response.
Function-Based Views (FBV)
# myapp/views.py
from django.shortcuts import render
from django.http import HttpResponse
# View sederhana mengembalikan HTTP response
def home(request):
return HttpResponse("Selamat datang di website kami!")
# View dengan template
def about(request):
context = {
'title': 'Tentang Kami',
'content': 'Ini adalah halaman tentang kami'
}
return render(request, 'myapp/about.html', context)
# View dengan parameter
def product_detail(request, id):
return HttpResponse(f"Detail produk dengan ID: {id}")
Class-Based Views (CBV)
# myapp/views.py
from django.views.generic import ListView
from .models import Product
class ProductListView(ListView):
model = Product
template_name = 'myapp/product_list.html'
context_object_name = 'products'
Pola URL yang Umum
- URL Dasar
path('articles/', views.article_list)
- URL dengan Parameter
path('articles/<int:year>/', views.year_archive)
- URL dengan Multiple Parameter
path('articles/<int:year>/<int:month>/', views.month_archive)
- URL dengan String Parameter
path('articles/<slug:title>/', views.article_detail)
Tips URLs dan Views
- Penamaan URL
- Gunakan nama yang deskriptif
- Hindari nama yang terlalu umum
# Baik
path('products/', views.product_list, name='product_list')
# Kurang baik
path('list/', views.product_list, name='list')
- Penggunaan URL di Template
<a href="{% url 'product_list' %}">Daftar Produk</a> <a href="{% url 'product_detail' id=1 %}">Detail Produk</a>
- Context dalam View
def home(request):
context = {
'title': 'Beranda',
'products': Product.objects.all(),
'categories': Category.objects.all()
}
return render(request, 'myapp/home.html', context)
- Redirects
from django.shortcuts import redirect
def after_submit(request):
# Proses form
return redirect('home')