Saya mencoba menampilkan atribut objek model saya dalam templat Django tetapi data tidak akan muncul di sumber halaman.

Di views.py

    def view_func(request):
        ...
        data = ModelObj.objects.all()
        print(data)   #prints <QuerySet [ <ModelObj: ModelObj object (primary_key)>, ... ]> 
        return render(request, "templates/app/page.html", {'data': data})

Di page.html

... formatted html ...
<thead> ... </thead>
   <tbody>
   { % for i in data % }
        <tr>
            <td> {{ i.name }} </td>
            <td> {{ i.time }} </td>
            <td> {{ i.value }} </td>
        </tr>
        { % endfor % }
   </tbody>

Saat saya melihat sumber halaman setelah menjalankan situs Django:

... html ...
    <tbody>
        { % for i in data % }
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        { % endfor % }
    </tbody>

Jika saya menambahkan <td> {{data}} </td> ke halaman html, saya dapat melihat tampilan <QuerySet [ <ModelObj: ModelObj object (primary_key)>, ... ]> pada halaman, tetapi Django tidak akan menampilkan atribut objek model pada halaman. Setiap bantuan dengan kesalahan ini dihargai, terima kasih. EDIT: Ini ada di Python 3.9 dengan Django versi 3.1.2

0
timo_werner45 11 Mei 2021, 02:33

1 menjawab

Jawaban Terbaik

Anda tampaknya memiliki spasi antara tanda persen % dan tanda kurung kurawal {} dalam templating jinja Anda. Itu adalah sintaks salah. { dan % tidak boleh mengandung spasi:

Sintaks yang Benar:

{% for i in data %}
  <td> {{ i.name }} </td>
  <td> {{ i.time }} </td>
  <td> {{ i.value }} </td>
{% endfor %}

Sintaks Salah: (Spasi adalah sintaks yang salah)

<!-- Incorrect Syntax -->
{ % for i in data % }
  <td> {{ i.name }} </td>
  <td> {{ i.time }} </td>
  <td> {{ i.value }} </td>
{ % endfor % }

Templat jinja seharusnya tidak terlihat di sumber halaman, misalnya jika loop dijalankan 3 kali, tag html akan ditampilkan tiga kali dan bukan templat jinja.

0
Girik1105 11 Mei 2021, 08:44