Django
Views and URLs

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

  1. URL Dasar
path('articles/', views.article_list)
  1. URL dengan Parameter
path('articles/<int:year>/', views.year_archive)
  1. URL dengan Multiple Parameter
path('articles/<int:year>/<int:month>/', views.month_archive)
  1. URL dengan String Parameter
path('articles/<slug:title>/', views.article_detail)

Tips URLs dan Views

  1. 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')
  1. Penggunaan URL di Template
<a href="{% url 'product_list' %}">Daftar Produk</a> <a href="{% url 'product_detail' id=1 %}">Detail Produk</a>
  1. Context dalam View
def home(request):
    context = {
        'title': 'Beranda',
        'products': Product.objects.all(),
        'categories': Category.objects.all()
    }
    return render(request, 'myapp/home.html', context)
  1. Redirects
from django.shortcuts import redirect
 
def after_submit(request):
    # Proses form
    return redirect('home')