Django'da Dinamik Görünümler ve Şablonlar Oluşturma

Django, dinamik web uygulamaları oluşturmayı kolaylaştıran güçlü bir framework'tür. Bu makalede, temel kavramlardan başlayarak daha gelişmiş tekniklere kadar Django'da dinamik görünümler ve şablonlar oluşturmayı inceleyeceğiz. Görünümlerden şablonlara veri aktarmayı ve şablon etiketlerini kullanarak bu verilere dayalı olarak dinamik içerik oluşturmayı ele alacağız.

Django'da Görünümler Nelerdir?

Django'da bir görünüm, bir web isteğini alıp bir web yanıtı döndüren bir Python işlevi veya sınıf tabanlı bileşendir. Yanıt bir HTML sayfası, bir JSON nesnesi veya herhangi bir başka tür içerik olabilir. Görünümler, kullanıcının isteğine göre dinamik olarak içerik üretmenize olanak tanır.

Basit Bir Görünüm Oluşturma

Django'da bir görünüm oluşturmak için, Django uygulamanızın views.py dosyasında bir fonksiyon tanımlamanız gerekir. Fonksiyon bir HTTP isteği alır ve bir HTTP yanıtı döndürür. Örneğin:

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

Bu basit görünüm "home.html" şablonunu oluşturur. Ancak verileri görünümden şablona geçirerek bunu daha dinamik hale getirebiliriz.

Verileri Şablonlara Aktarma

Bir görünümden bir şablona veri geçirmek için, render işlevini çağırırken bağlam argümanında bir sözlük kullanabilirsiniz. Örneğin, şablona dinamik bir mesaj geçirmek için "home" görünümünü değiştirelim:

def home(request):
    context = {
        'message': 'Welcome to my website!'
    }
    return render(request, 'home.html', context)

Şimdi, "home.html" şablonunda `message` değişkenine erişebilirsiniz:

<h1>{{ message }}</h1>

Bu, görünümden geçirilen mesajı görüntüler: "Websitemize hoş geldiniz!"

Dinamik İçerik için Şablon Etiketlerini Kullanma

Django şablonları, HTML'nizde dinamik içerik oluşturmanıza yardımcı olan güçlü şablon etiketlerini destekler. Bazı yaygın şablon etiketleri şunlardır:

  • Koşullu ifadeler için {% if %}... {% endif %}.
  • {% for %}... {% endfor %} veriler üzerinde döngü oluşturmak için.
  • HTML'e dinamik değerler eklemek için {{ değişken }}.

Bir If İfadesi Kullanma

Sadece belirli bir koşul doğruysa görünen dinamik bir mesaj ekleyelim. "home" görünümünü bir koşulu geçirecek şekilde değiştirelim:

def home(request):
    context = {
        'message': 'Welcome to my website!',
        'user_logged_in': True
    }
    return render(request, 'home.html', context)

Şablonda, yalnızca kullanıcı oturum açmışsa bir karşılama mesajı görüntülemek için if ifadesini kullanabilirsiniz:

{% if user_logged_in %}
    <p>You are logged in!</p>
{% else %}
    <p>Please log in to access more features.</p>
{% endif %}

Veriler Arasında Döngü

Şimdi, şablona bir öğe listesi geçirelim ve bunları for döngüsünü kullanarak gösterelim. İlk olarak, görünümü değiştirin:

def home(request):
    context = {
        'message': 'Welcome to my website!',
        'items': ['Item 1', 'Item 2', 'Item 3']
    }
    return render(request, 'home.html', context)

Şimdi şablonda, her bir öğeyi görüntülemek için for döngüsünü kullanın:

<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

Bu, öğelerin sıralanmamış bir listesini oluşturur: Öğe 1, Öğe 2 ve Öğe 3.

Yeniden Kullanılabilir Düzenler için Şablon Mirası

Django, birden fazla sayfada yeniden kullanılabilen ortak bir düzen oluşturmak için şablon kalıtımını kullanmanıza olanak tanır. Örneğin, HTML sayfanızın yapısını içeren bir temel şablon oluşturalım:

<!-- base.html -->
<html>
    <head>
        <title>My Website</title>
    </head>
    <body>
        <header>
            <h1>My Website</h1>
        </header>
        
        <main>
            {% block content %}{% endblock %}
        </main>

        <footer>
            <p>Footer content here</p>
        </footer>
    </body>
</html>

Şimdi "home.html" şablonunuzda temel şablonu genişletin ve içerik bloğunu tanımlayın:

<!-- home.html -->
{% extends 'base.html' %}

{% block content %}
    <h2>Welcome to the Home Page</h2>
    <p>This is the dynamic content of the home page.</p>
{% endblock %}

Oluşturulduğunda, "home.html" içeriği temel şablonun {% block content %}{% endblock %} bölümüne eklenecektir.

Çözüm

Django'da dinamik görünümler ve şablonlar oluşturmayı öğrendik. Görünümlerden şablonlara veri aktararak ve Django'nun güçlü şablon etiketlerini kullanarak zengin ve etkileşimli web sayfaları oluşturabilirsiniz. Ayrıca, şablon kalıtımı, uygulamanız genelinde ortak düzenleri yeniden kullanmanıza olanak tanır ve kodunuzu daha sürdürülebilir hale getirir.

Bu kavramların yerinde olmasıyla, daha karmaşık Django uygulamaları oluşturmaya başlayabilir ve çerçevenin tüm gücünden yararlanabilirsiniz.