Latest web development tutorials

Template Django

Dalam bab terakhir kita menggunakan django.http.HttpResponse () untuk output "Hello World!". Cara data dicampur bersama-sama dengan pandangan, tidak memenuhi MVC memikirkan Django.

bab ini kita akan menjelaskan kepada Anda Django template aplikasi, template adalah teks untuk presentasi dan dokumen terpisah konten.


Contoh Aplikasi template

Kami mengikuti bagian sebelumnya dari proyek akan dibuat di bawah HelloWorld direktori direktori template dan membangun berkas hello.html, struktur direktori seluruh adalah sebagai berikut:

HelloWorld/
|-- HelloWorld
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- view.py
|   |-- view.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- manage.py
`-- templates
    `-- hello.html

file kode hello.html adalah sebagai berikut:

<h1>{{ hello }}</h1>

Kita tahu dari variabel template untuk menggunakan tanda kurung ganda.

Selanjutnya kita perlu menjelaskan jalan Django file template, memodifikasi HelloWorld / settings.py, memodifikasi TEMPLATES yang DIRS untuk[BASE_DIR + "/ template", ], sebagai berikut:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+"/templates",],
        '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',
            ],
        },
    },
]

Kami sekarang memodifikasi view.py, menambahkan objek baru, untuk mengirimkan data ke template:

# -*- coding: utf-8 -*-

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

def hello(request):
    context          = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)

Kita bisa melihat bahwa kita digunakan di sini bukan membuat HttpResponse sebelum digunakan. membuat juga menggunakan konteks kamus sebagai parameter.

elemen kunci dalam kamus konteks "halo" sesuai dengan variabel dalam template "{{halo}}".

Kemudian mengunjungi kunjungan http://192.168.45.3:8000/hello/, Anda dapat melihat halaman:

Kemudian kami menyelesaikan template untuk menggunakan data output, memungkinkan tampilan data pemisahan.

Selanjutnya, kami akan memperkenalkan aturan sintaks template umum.


tag template Django

jika / tag lain

Sintaks dasar adalah sebagai berikut:

{% if condition %}
     ... display
{% endif %}

atau:

{% if condition1 %}
   ... display 1
{% elif condiiton2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

Sesuai dengan kondisi untuk menentukan apakah output. jika / lain mendukung bersarang.

{% Jika%} tag menerima dan atau atau tidak membuat penilaian pada kata kunci untuk beberapa variabel, atau variabel menegasikan (tidak), misalnya:

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}

untuk label

{% Untuk%} memungkinkan kita untuk iterate atas berurutan.

Dan kasus Python untuk laporan yang sama, sintaks loop untuk X di Y, Y adalah urutan loop atas dan X adalah nama variabel yang digunakan dalam setiap siklus tertentu.

Setiap kali melalui loop, sistem template yang akan membuat semua {% untuk%} {% endfor%} konten antara dan.

Misalnya, diberikan daftar variabel atlet athlete_list, kita dapat menggunakan kode berikut untuk menampilkan daftar ini:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

Label untuk menambahkan daftar yang akan dibalik sehingga iterator sebaliknya:

{% for athlete in athlete_list reversed %}
...
{% endfor %}

Anda dapat bersarang {% untuk%} tag:

{% for athlete in athlete_list %}
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
        <li>{{ sport }}</li>
    {% endfor %}
    </ul>
{% endfor %}

ifequal / tag ifnotequal

{% Ifequal%} tag membandingkan dua nilai, ketika mereka sama, menampilkan semua nilai dalam {% ifequal%} dan {% endifequal%} menjadi.

Contoh berikut membandingkan pengguna variabel template dan dua CurrentUser:

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

Dan {% jika%} Demikian pula, {% ifequal%} mendukung {% else%} tag opsional: 8

{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

Catatan Tab

Django anotasi menggunakan {##}.

{# 这是一个注释 #}

filter

Filter Template dapat ditampilkan dalam variabel sebelum memodifikasi itu, karakter pipa filter, sebagai berikut:

{{ name|lower }}

{{Nama}} variabel setelah proses penyaringan yang lebih rendah, mendokumentasikan mengkonversi teks ke huruf kecil huruf besar.

Filter pipa socket dapat * *, keduanya mengatakan, sebuah pipa output filter dan dapat digunakan sebagai masukan untuk pipa berikutnya:

{{ my_list|first|upper }}

Elemen pertama dari contoh di atas dan mengubahnya menjadi huruf besar.

Beberapa filter memiliki parameter. Setelah parameter filter diikuti oleh usus dan kutipan selalu ganda. Sebagai contoh:

{{ bio|truncatewords:"30" }}

Variabel ini akan menampilkan 30 kata-kata pertama dari bio.

Filter lain:

  • addslashes: menambahkan backslash backslash di depan setiap kutip tunggal atau tanda kutip ganda.
  • date: Tekan format format string argumen tanggal yang ditentukan atau contoh objek datetime:
    {{ pub_date|date:"F j, Y" }}
  • Panjang: Mengembalikan panjang dari variabel.

termasuk tag

{% Sertakan%} tag memungkinkan konten lainnya yang berisi template dalam template.

Dua contoh berikut termasuk kerangka nav.html:

{% include "nav.html" %}

template warisan

Template dapat mewarisi cara untuk mencapai multiplexing.

Selanjutnya, kita membuat direktori template sebelum menambahkan file proyek base.html, sebagai berikut:

<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    <h1>Hello World!</h1>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
  </body>
</html>

Kode di atas, blok tag bernama mainbody adalah bahwa hal itu dapat menjadi penerus untuk menggantikan bagian.

Semua {% block%} tag memberitahu mesin template yang anak template bisa menimpa bagian ini.

hello.html mewarisi base.html, dan mengganti blok tertentu, hello.html kode diubah sebagai berikut:

{% extends "base.html" %}

{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

Baris pertama dari kode menggambarkan hello.html mewarisi berkas base.html. Kita bisa lihat di sini nama yang sama dari tag blok untuk menggantikan blok yang sesuai base.html.

Kembali alamat http://192.168.45.3:8000/hello/, hasil output adalah sebagai berikut: