Django - ระบบเทมเพลต
Django ช่วยให้สามารถแยก python และ HTML ได้โดย python จะไปในมุมมองและ HTML จะอยู่ในเทมเพลต ในการเชื่อมโยงทั้งสองอย่าง Django อาศัยฟังก์ชันการแสดงผลและภาษาเทมเพลต Django
ฟังก์ชัน Render
ฟังก์ชันนี้รับสามพารามิเตอร์ -
Request - คำขอเริ่มต้น
The path to the template - นี่คือเส้นทางที่สัมพันธ์กับตัวเลือก TEMPLATE_DIRS ในตัวแปรโปรเจ็กต์ settings.py
Dictionary of parameters- พจนานุกรมที่มีตัวแปรทั้งหมดที่จำเป็นในเทมเพลต คุณสามารถสร้างตัวแปรนี้หรือคุณสามารถใช้ local () เพื่อส่งผ่านตัวแปรท้องถิ่นทั้งหมดที่ประกาศในมุมมอง
ภาษาเทมเพลต Django (DTL)
เอ็นจิ้นเทมเพลตของ Django นำเสนอมินิภาษาเพื่อกำหนดเลเยอร์ที่ผู้ใช้หันหน้าเข้าหาแอปพลิเคชัน
การแสดงตัวแปร
ตัวแปรมีลักษณะดังนี้: {{variable}} เทมเพลตแทนที่ตัวแปรโดยตัวแปรที่ส่งโดยมุมมองในพารามิเตอร์ที่สามของฟังก์ชันการแสดงผล มาเปลี่ยน hello.html ของเราเพื่อแสดงวันที่ของวันนี้ -
hello.html
<html>
<body>
Hello World!!!<p>Today is {{today}}</p>
</body>
</html>
จากนั้นมุมมองของเราจะเปลี่ยนเป็น -
def hello(request):
today = datetime.datetime.now().date()
return render(request, "hello.html", {"today" : today})
ตอนนี้เราจะได้รับผลลัพธ์ต่อไปนี้หลังจากเข้าถึง URL / myapp / hello -
Hello World!!!
Today is Sept. 11, 2015
อย่างที่คุณสังเกตเห็นแล้วถ้าตัวแปรไม่ใช่สตริง Django จะใช้เมธอด __str__ เพื่อแสดง และด้วยหลักการเดียวกันนี้คุณสามารถเข้าถึงแอตทริบิวต์วัตถุได้เช่นเดียวกับที่คุณทำใน Python ตัวอย่างเช่นหากเราต้องการแสดงปีวันที่ตัวแปรของฉันจะเป็น: {{today.year}}
ฟิลเตอร์
ช่วยให้คุณแก้ไขตัวแปรในเวลาแสดงผล โครงสร้างตัวกรองมีลักษณะดังต่อไปนี้: {{var | filters}}
Some examples -
{{string|truncatewords:80}} - ตัวกรองนี้จะตัดสตริงดังนั้นคุณจะเห็นเฉพาะ 80 คำแรกเท่านั้น
{{string|lower}} - แปลงสตริงเป็นตัวพิมพ์เล็ก
{{string|escape|linebreaks}} - หลีกเลี่ยงเนื้อหาสตริงจากนั้นแปลงตัวแบ่งบรรทัดเป็นแท็ก
คุณยังสามารถตั้งค่าเริ่มต้นสำหรับตัวแปร
แท็ก
แท็กช่วยให้คุณสามารถดำเนินการต่อไปนี้: if condition, for loop, template inheritance และอื่น ๆ
แท็ก if
เช่นเดียวกับใน Python คุณสามารถใช้ if, else และ elif ในเทมเพลตของคุณ -
<html>
<body>
Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}
the first day of month.
{% elif today.day == 30 %}
the last day of month.
{% else %}
I don't know.
{%endif%}
</body>
</html>
ในเทมเพลตใหม่นี้ขึ้นอยู่กับวันที่ของวันนั้นเทมเพลตจะแสดงค่าที่แน่นอน
แท็กสำหรับ
เช่นเดียวกับ 'if' เรามีแท็ก 'for' ซึ่งทำงานได้เหมือนกับใน Python มาเปลี่ยนมุมมองสวัสดีเพื่อส่งรายการไปยังเทมเพลตของเรา -
def hello(request):
today = datetime.datetime.now().date()
daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})
เทมเพลตที่จะแสดงรายการโดยใช้ {{for}} -
<html>
<body>
Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}
the first day of month.
{% elif today.day == 30 %}
the last day of month.
{% else %}
I don't know.
{%endif%}
<p>
{% for day in days_of_week %}
{{day}}
</p>
{% endfor %}
</body>
</html>
และเราควรจะได้รับสิ่งที่ชอบ -
Hello World!!!
Today is Sept. 11, 2015
We are I don't know.
Mon
Tue
Wed
Thu
Fri
Sat
Sun
บล็อกและขยายแท็ก
ระบบเทมเพลตไม่สามารถสมบูรณ์ได้หากไม่มีการสืบทอดเทมเพลต ความหมายเมื่อคุณออกแบบเทมเพลตคุณควรมีเทมเพลตหลักที่มีรูที่เทมเพลตของเด็กจะเติมตามความต้องการของเขาเองเช่นเพจอาจต้องใช้ css พิเศษสำหรับแท็บที่เลือก
มาเปลี่ยนเทมเพลต hello.html เพื่อสืบทอดจาก main_template.html
main_template.html
<html>
<head>
<title>
{% block title %}Page Title{% endblock %}
</title>
</head>
<body>
{% block content %}
Body content
{% endblock %}
</body>
</html>
hello.html
{% extends "main_template.html" %}
{% block title %}My Hello Page{% endblock %}
{% block content %}
Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}
the first day of month.
{% elif today.day == 30 %}
the last day of month.
{% else %}
I don't know.
{%endif%}
<p>
{% for day in days_of_week %}
{{day}}
</p>
{% endfor %}
{% endblock %}
ในตัวอย่างข้างต้นในการโทร / myapp / hello เราจะยังคงได้ผลลัพธ์เหมือนเดิม แต่ตอนนี้เราอาศัยการขยายและบล็อกเพื่อ refactor รหัสของเรา -
ใน main_template.html เรากำหนดบล็อกโดยใช้แท็กบล็อก บล็อกหัวเรื่องจะมีชื่อเพจและบล็อกเนื้อหาจะมีเนื้อหาหลักของเพจ ใน home.html เราใช้การขยายเพื่อสืบทอดจาก main_template.html จากนั้นเราเติมคำจำกัดความของบล็อกด้านบน (เนื้อหาและชื่อเรื่อง)
แท็กความคิดเห็น
แท็กความคิดเห็นช่วยในการกำหนดความคิดเห็นเป็นเทมเพลตไม่ใช่ความคิดเห็น HTML แต่จะไม่ปรากฏในหน้า HTML อาจเป็นประโยชน์สำหรับการจัดทำเอกสารหรือเพียงแค่แสดงความคิดเห็นเกี่ยวกับโค้ด