Web2py - จำนวนการดู

web2py framework ใช้ Models, Controllers และ Viewsในการใช้งาน รวมถึงไวยากรณ์ Python ที่แก้ไขเล็กน้อยในไฟล์Views สำหรับโค้ดที่อ่านได้มากขึ้นโดยไม่มีข้อ จำกัด ใด ๆ ตามที่กำหนดไว้ในการใช้งาน Python ที่เหมาะสม

จุดประสงค์หลักของ web2py Viewคือการฝังโค้ด python ในเอกสาร HTML อย่างไรก็ตามมีปัญหาบางประการซึ่งมีดังนี้ -

  • การหลบหนีของโค้ด python ที่ฝังในเอกสาร HTML
  • ตามการเยื้องตาม Python ซึ่งอาจส่งผลต่อกฎ HTML

เพื่อหลีกเลี่ยงปัญหา web2py ใช้ตัวคั่น {{.. }} ในส่วนมุมมอง ตัวคั่นช่วยในการหลบหนีรหัสหลามที่ฝังไว้ นอกจากนี้ยังช่วยในการปฏิบัติตามกฎ HTML ของการเยื้อง

รหัสที่รวมอยู่ภายใน {{..}}ตัวคั่นรวมถึงรหัส Python โดยไม่ได้ตั้งใจ เนื่องจากปกติ Python จะใช้การเยื้องเพื่อคั่นบล็อกของโค้ดดังนั้นโค้ดที่ไม่ได้ตั้งใจภายในตัวคั่นจึงควรได้รับการดูแลอย่างเหมาะสม เพื่อแก้ไขปัญหานี้ web2py ใช้ไฟล์“pass” คำสำคัญ.

บล็อกรหัสที่ขึ้นต้นด้วยบรรทัดสิ้นสุดด้วยเครื่องหมายจุดคู่และลงท้ายด้วยบรรทัดที่ขึ้นต้นด้วยรหัสผ่าน

Note - pass เป็นคีย์เวิร์ด Python ไม่ใช่คีย์เวิร์ด web2py

รหัสต่อไปนี้แสดงการใช้งานของคำสำคัญผ่าน -

{{
   if num > 0:
      response.write('positive number')
   else:
      response.write('negative number')
      pass
}}

ผู้ช่วยเหลือ HTML

web2py มีคลาสตัวช่วยที่สามารถใช้สร้าง HTML โดยใช้โปรแกรม มันสอดคล้องกับแท็ก HTML ซึ่งเรียกว่า "ผู้ช่วย HTML"

ตัวอย่างเช่น -

[(A('Home', _href = URL('default', 'home')), False, None, []), ...]

ที่นี่ A เป็นผู้ช่วยที่สอดคล้องกับจุดยึด <a>แท็กของ HTML สร้างจุดยึด HTML<a> แท็กโดยทางโปรแกรม

ตัวช่วย HTML ประกอบด้วยสองประเภท ได้แก่ positional และ named ข้อโต้แย้ง

  • Positional อาร์กิวเมนต์ถูกตีความว่าเป็นวัตถุที่อยู่ระหว่างแท็กเปิดและปิดของ HTML

  • Named อาร์กิวเมนต์เริ่มต้นด้วยขีดล่างถูกตีความว่าเป็นแท็ก HTML

ผู้ช่วยเหลือยังมีประโยชน์ในการทำให้อนุกรมของสตริงด้วย _str_และวิธี xml ตัวอย่างเช่น -

>>> print str(DIV(“hello world”))

เอาต์พุต

<div> hello world </div>

Note - ตัวช่วย HTML จัดเตรียมการเป็นตัวแทนฝั่งเซิร์ฟเวอร์ของ Document Object Model (DOM)

ผู้ช่วยเหลือ XML

XML ถูกเรียกว่าเป็นอ็อบเจ็กต์ซึ่งห่อหุ้มข้อความที่ไม่ควรหลีกหนี ข้อความอาจมีหรือไม่มี XML ที่ถูกต้อง

ตัวอย่างเช่นสำหรับโค้ดที่กล่าวถึงด้านล่างอาจมี JavaScript

>>> print XML('<script>alert("unsafe!")</script>')

เอาต์พุต

<script> alert(“unsafe!”)</script>

ตัวช่วยในตัว

มีตัวช่วยในตัวมากมายที่ใช้ใน web2py ตัวช่วยในตัว HTML บางส่วนมีการระบุไว้ด้านล่าง

ชื่อ การใช้งาน ตัวอย่าง
ตัวช่วยนี้ใช้เพื่อสร้างลิงก์ สอดคล้องกับแท็กจุดยึด
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
ตัวช่วยนี้ช่วยในการทำให้เนื้อหาของข้อความเป็นตัวหนา
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
ร่างกาย ตัวช่วยนี้ทำให้เนื้อหาของเพจ นอกจากนี้ยังมีตัวดำเนินการคูณเพื่อเพิ่มจำนวนตัวแบ่ง
BR()
รหัส ดำเนินการเน้นไวยากรณ์สำหรับรหัส Python, C, C ++ และ web2py ผู้ช่วยนี้ยังมีความสามารถในการเชื่อมโยงเอกสาร API
CODE('print "hello"', language = 'python').xml()
FIELDSET จะสร้างช่องป้อนข้อมูลร่วมกับป้ายกำกับ
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
ศีรษะ ช่วยในการติดแท็ก <head> แท็กของหน้า HTML
HEAD(TITLE('<hello>'))
IMG ช่วยในการฝังภาพสำหรับหน้า HTML ที่กำหนด
IMG(_src = 'http://example.com/image.png',_alt = 'test')

ผู้ช่วยเหลือที่กำหนดเอง

ตัวช่วยเหล่านี้ใช้เพื่อปรับแต่งแท็กตามความต้องการ web2py ใช้ตัวช่วยแบบกำหนดเองต่อไปนี้ -

TAG

web2py ใช้ TAG เป็นตัวสร้างแท็กสากล ช่วยในการสร้างแท็ก XML ที่กำหนดเอง ไวยากรณ์ทั่วไปมีดังนี้ -

{{ = TAG.name('a', 'b', _c = 'd')}}

สร้างโค้ด XML เป็น: <name c = "d"> ab </name>

TAG เป็นอ็อบเจ็กต์และTAG.nameหรือTAG['name']เป็นฟังก์ชันที่ส่งคืนคลาสตัวช่วยชั่วคราว

เมนู

ตัวช่วยนี้สร้างรายการของรายการหรือค่าของรายการเมนูโดยสร้างโครงสร้างแบบต้นไม้ที่แสดงถึงเมนู รายการเมนูอยู่ในรูปแบบresponse.menu. ตัวอย่างเช่น -

print MENU([['One', False, 'link1'], ['Two', False, 'link2']])

ผลลัพธ์จะแสดงดังนี้ -

<ul class = "web2py-menu web2py-menu-vertical">
   <li><a href = "link1">One</a></li>
   <li><a href = "link2">Two</a></li>
</ul>

ความงาม

ช่วยในการสร้างตัวแทนของวัตถุผสมรวมถึงรายการและพจนานุกรม ตัวอย่างเช่น,

{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}

ส่งคืนอ็อบเจ็กต์ XML ที่สามารถทำให้เป็นอนุกรมได้กับ XML โดยมีการแทนอาร์กิวเมนต์ตัวสร้าง ในกรณีนี้การแสดงจะเป็น -

{"a": ["hello", XML("world")], "b": (1, 2)}

ผลลัพธ์จะแสดงผลเป็น -

<table>
   <tr>
      <td>a</td>
      <td>:</td>
      <td>hello<br />world</td>
   </tr>
   
   <tr>
      <td>b</td>
      <td>:</td>
      <td>1<br />2</td>
   </tr>
</table>

การแสดงผล DOM ฝั่งเซิร์ฟเวอร์

การแสดงผลฝั่งเซิร์ฟเวอร์อนุญาตให้ผู้ใช้แสดงสถานะเริ่มต้นของคอมโพเนนต์ web2py ล่วงหน้า ตัวช่วยที่ได้รับทั้งหมดจะให้องค์ประกอบการค้นหาและองค์ประกอบเพื่อแสดง DOM ทางฝั่งเซิร์ฟเวอร์

elementส่งคืนองค์ประกอบลูกตัวแรกที่ตรงกับเงื่อนไขที่ระบุ ในทางกลับกัน,elementsส่งคืนรายชื่อเด็กที่ตรงกันทั้งหมด ทั้งสองใช้ไวยากรณ์เดียวกัน

สิ่งนี้สามารถแสดงให้เห็นได้ด้วยตัวอย่างต่อไปนี้ -

a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc')))
d = a.elements('div#target')
d[0][0] = 'changed'
print a

ผลลัพธ์จะได้รับเป็น -

<div><div><div id = "target" class = "abc">changed</div></div></div>

เค้าโครงหน้า

มุมมองใช้เพื่อแสดงผลลัพธ์ให้กับผู้ใช้ปลายทาง สามารถขยายและรวมมุมมองอื่น ๆ ได้เช่นกัน สิ่งนี้จะใช้โครงสร้างที่เหมือนต้นไม้

ตัวอย่าง - “index.html” ขยายไปถึง “layout.html” ซึ่งอาจรวมถึง “menu.html” ซึ่งจะรวมถึง “header.html”.

{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}

ตัวอย่าง

ในบทก่อนหน้านี้เราได้สร้างโมเดลและตัวควบคุมสำหรับโมดูลของ บริษัท ตอนนี้เราจะเน้นไปที่การสร้างมุมมองซึ่งช่วยในการแสดงผลการแสดงข้อมูล

ตามค่าเริ่มต้นมุมมองใน web2py จะรวม layout.html และ index.htmlซึ่งกำหนดส่วนโดยรวมของการแสดงข้อมูล

{{extend 'layout.html'}}
<h2>Companies</h2>

<table>
   {{for company in companies:}}
   <tr>
      <td>{{ = A(company.name, _href = URL('contacts', args = company.id))}}</td>
      <td>{{ = A('edit', _href = URL('company_edit', args = company.id))}}</td>
   </tr>
   
   {{pass}}
   <tr>
      <td>{{ = A('add company', _href = URL('company_create'))}}</td>
   </tr>
	
</table>

ผลลัพธ์จะเป็นดังนี้ -