Django template for döngüsü çıktı sorunu


#1

Arkadaşlar merhaba,

        <div class="col-7 bg-success" style="width: 616px;">
            {% for key, value in context.items %}
            <div class="card">
                <img class="card-img-top" src="https://via.placeholder.com/350x150" alt="Card image cap">
                <div class="card-body">
                    <h5 class="card-title">{‌{key}}: {{value}}</h5>
                    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                    <a href="#" class="btn btn-primary">Go somewhere</a>
                </div>
            </div>
            {% endfor %}
        </div>

bu kodları yazdığımda hata da vermiyor, çıktı da. Views kodlarımda şu şekilde

from django.shortcuts import render
from .models import Kitap
from django.template import loader
from django.http import HttpResponse

# Create your views here.

 def index(request):
    template = loader.get_template('Kitap/index.html')
    context = {'isim': 'Ali',
               'soyisim': 'Veli',
               'yas': '21',
               'boy': '1.70'}
    return HttpResponse(template.render(context, request))

ancak for döngüsünü kaldırdığımda card geliyor. Nerde yanlış yapıyorum acaba? Yardım ve geri dönüşlerinizi bekliyorum arkadaşlar, iyi akşamlar.


#2

For döngüsünü kaldırırken html kısmından kurtulursanız veya silerseniz gelmez.

Düz html metni içinde kaldığı için kart geliyor.


#3

Django’nun hangi versionu bu ?

djangoda-sablon-aktarma-sorunu/ bu cevabı incelerseniz, yine aynı sorun gibi geldi


#4

Hocam merhaba,

Django 2.1.4 versiyonu kullanıyorum. Verdiğiniz bağlantıyı inceledim sorun aynı sayılmaz. Size kodlarımın son halini yazayım,

index.html

{% if kitap_list %}
        <ul>
            {% for kitap in kitap_list %}
                <li> <a href="/polls/{{ kitap.id }}/"&gt;{{ kitap.kitap_adi }}> </li>
            {% endfor %}
        </ul>
    {% else %}
        <p>Kitap Yok.</p>
    {% endif %}

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from django.template import loader
# Create your views here.

def index(request):
    kitap_list = Kitap.objects.order_by('-kayit_zamani')[:5]
    context = {'Kitap Listesi: ': kitap_list}
    return render(request, 'Kitap/index.html', context)  

bu kodlar template kullanmadığım sürece bana kitap listesini getiriyor. Yani şu şekilde bir kod yazarsam,

views.py

def index(request):
        kitap_list = Kitap.objects.order_by('-kayit_zamani')[:5]
        context = [i.kitap_adi for i in kitap_list]
        return HttpResponse(context)

kitap listesini alıyorum. Template kullandığımda kodlar else bölümüne düşüyor ve ekrana Kitap Yok yazdırıyor. Hiç bir hata vs. birşeyde almıyorum anlayamadım gerçekten neyden kaynaklandığını.


#5

Bir de şu şekilde deneyebilir misiniz acaba?

from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from django.template import loader
# Create your views here.

def index(request):
    kitap_list = Kitap.objects.order_by('-kayit_zamani')[:5]
    context = {'kitap_list': kitap_list}
    return render(request, 'Kitap/index.html', context)  

#6

Öneri için teşekkür ederim. Burada aynı kodu yazmıştım aslında malesef else bölümüne giriyor yine. Sorunun python versiyonundan olma ihtimali var mı acaba? Python 3.6.3 ile yapıyorum çalışmalarımı.


#7

{% if kitap_list is not None %} yapmayı deneyin olmuyorsa büyük ihtimalle kitap_list boş değer dönüyordur.


#8

Acaba benim yazdığım koddaki farklılığı gördünüz mü? Benim yaptığım değişiklik şu

context = {'Kitap Listesi: ': kitap_list}

#Bunun yerine

context = {'kitap_list': kitap_list}

Yani template içinde erişmeye çalıştığınız değişken adını context içerisinde verdim. Şurayı baz alarak yaptım

https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#example


#9

Evet gördüm hocam o şekilde düzenleyip denedim zaten malesef oda çalışmadı.


#10

Yok hocam sonuç aynı malesef.

kitap_list template kullanmazsam değer döndürüyor hocam. Yani şurda yazdığım kodlar çalışıyor,


#11

O zaman sizden ricam şu kodu deneyip bir geri dönüş yapar mısınız?

from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from django.template import loader
# Create your views here.

def index(request):
    kitap_list = Kitap.objects.order_by('-kayit_zamani')[:5]
    liste = [i.kitap_adi for i in kitap_list]
    context = {"kitap_list":liste}
    return render(request, 'Kitap/index.html', context = context)

#12

Hocam sorunu çözdüm,

  1. Hatam sizinde değindiğiniz context içindeki key’in arasında boşluk olması.
  2. Hatam template içinde kullandığım

bu satır. Kodlarımın son hali şöyle,

views.py

from django.shortcuts import render
    from django.http import HttpResponse
    from .models import *
    from django.template import loader
    # Create your views here.

    def index(request):
        kitap_list = Kitap.objects.order_by('-kayit_zamani')[:5]
        context = {"kitap_list":kitap_list}
        return render(request, 'Kitap/index.html', context)

index.html

{% if kitap_list %}

<ul>

{% for kitap in kitap_list %}

<li>{{ kitap }}</li>

{% endfor %}

</ul>

{% else %}

<p>Kitap Yok.</p>

{% endif %}

başta @coderistan olmak üzere yardımcı olmaya çalışan tüm arkadaşlara çok teşekkür ederim. Artık kaldığım yerden devam edebilirim projeme :slight_smile:


#13

Rica ederiz. İyi çalışmalar :slight_smile: