2438

Python ile Sıfırdan İleri Seviye Python Programlama

Django Templates

Python django dersleri serimizin bu bölümünde django ile template dosyalarını nasıl ekleriz, öğrenelim.

Django Templates

 

Bir önceki dersimizde url şeması oluşturduk ve her bir url ile bir view metodunu ilişkilendirdik ancak her bir view geriye httpresponse nesnesi aracılığıyla sadece bir yazı döndürüyor ancak gerçek web uygulama senaryosunda geriye bir html sayfası döndürüyor olmalıyız. Dolayısıyla bu yazımızda django ile template dosyalarını nasıl oluşturuyoruz, öğrenelim.

from django.http.response import HttpResponse
from django.shortcuts import render

def index(request):
    return render(request, "blog/index.html")

def posts(request):
    return render(request, "blog/posts.html")

Django uygulamalarında geriye bir html sayfası döndürmek için render() metodunu kullanıyor olmalıyız.

render() metodu ilk parametre olarak uygulamaya yapılan request nesnesini ilk parametre olarak alması gerekiyor. İkinci parametre olarak ise döndürülecek html sayfasının ismini alır.

Peki html sayfalarının konumu nerede olmalıdır?

Django projelerinde default olarak her bir django uygulaması içindeki Templates klasörü otomatik olarak taranır ve hangi uygulama içerisinde templates klasöründe örneğin blog/index.html sayfası bulunursa geriye döndürülür.

settings.py dosyasında default ayarı değiştirebiliriz. 'APP_DIRS': True ile her bir uygulamadaki templates klasörü otomatik taranır. İsterseniz html dosyalarını her bir uygulama içerisine ayrı ayrı almak yerine tek bir klasörde de toplayabilirsiniz. (Layout dersinde öğreneceğiz.)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [ ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Templates klasörünün içerisine hangi django uygulamasındaysak o uygulama ismiyle bir klasör oluşturuyorum çünkü direk index.html sayfasını çağırmak yerine blog uygulamasındaki index.html dosyası getirilsin ya da account uygulasındaki index.html getirilsin şeklinde ayrımını yapalım.

templates/blog/index.html dosyasına bir html iskeleti ekleyiniz.

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Anasayfa</h1>
</body>
</html>

templates/blog/posts.html dosyasına bir html iskeleti ekleyiniz.

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Blog Listesi</h1>
</body>
</html>

Artık geriye bir html sayfasını döndürebiliyoruz. 

Projeyi indir.