The psp module provides a way to convert text documents (including, bu การแปล - The psp module provides a way to convert text documents (including, bu ไทย วิธีการพูด

The psp module provides a way to co

The psp module provides a way to convert text documents (including, but not limited to HTML documents) containing Python code embedded in special brackets into pure Python code suitable for execution within a mod_python handler, thereby providing a versatile mechanism for delivering dynamic content in a style similar to ASP, JSP and others.

The parser used by psp is written in C (generated using flex) and is therefore very fast.

See 7.2 ``PSP Handler'' for additional PSP information.

Inside the document, Python code needs to be surrounded by "". Python expressions are enclosed in "". A directive can be enclosed in "". A comment (which will never be part of the resulting code) can be enclosed in ""

Here is a primitive PSP page that demonstrated use of both code and expression embedded in an HTML document:



Hello world, the time is:

Internally, the PSP parser would translate the above page into the following Python code:

req.write("""
""")
import time
req.write("""
Hello world, the time is: """); req.write(str(time.strftime("%Y-%m-%d, %H:%M:%S"))); req.write("""

""")
This code, when executed inside a handler would result in a page displaying words "Hello world, the time is: " followed by current time.

Python code can be used to output parts of the page conditionally or in loops. Blocks are denoted from within Python code by indentation. The last indentation in Python code (even if it is a comment) will persist through the document until either end of document or more Python code.

Here is an example:



This paragraph will be
repeated 3 times.

This line will only be shown once.


The above will be internally translated to the following Python code:

req.write("""
""")
for n in range(3):
# This indent will persist
req.write("""
This paragraph will be
repeated 3 times.
""")
# This line will cause the block to end
req.write("""
This line will only be shown once.


""")
The parser is also smart enough to figure out the indent if the last line of Python ends with ":" (colon). Considering this, and that the indent is reset when a newline is encountered inside "", the above page can be written as:



This paragraph will be
repeated 3 times.

This line will only be shown once.


However, the above code can be confusing, thus having descriptive comments denoting blocks is highly recommended as a good practice.

The only directive supported at this time is include, here is how it can be used:


If the parse() function was called with the dir argument, then the file can be specified as a relative path, otherwise it has to be absolute.

class PSP( req, [, filename, string, vars])
This class represents a PSP object.
req is a request object; filename and string are optional keyword arguments which indicate the source of the PSP code. Only one of these can be specified. If neither is specified, req.filename is used as filename.

vars is a dictionary of global variables. Vars passed in the run() method will override vars passed in here.

This class is used internally by the PSP handler, but can also be used as a general purpose templating tool.

When a file is used as the source, the code object resulting from the specified file is stored in a memory cache keyed on file name and file modification time. The cache is global to the Python interpreter. Therefore, unless the file modification time changes, the file is parsed and resulting code is compiled only once per interpreter.

The cache is limited to 512 pages, which depending on the size of the pages could potentially occupy a significant amount of memory. If memory is of concern, then you can switch to dbm file caching. Our simple tests showed only 20% slower performance using bsd db. You will need to check which implementation anydbm defaults to on your system as some dbm libraries impose a limit on the size of the entry making them unsuitable. Dbm caching can be enabled via mod_python.psp.cache_database_filename Python option, e.g.:

PythonOption mod_python.psp.cache_database_filename ``/tmp/pspcache.dbm''
Note that the dbm cache file is not deleted when the server restarts.
Unlike with files, the code objects resulting from a string are cached in memory only. There is no option to cache in a dbm file at this time.

Note that the above name for the option setting was only changed to this value in mod_python 3.3. If you need to retain backward compatability with older versions of mod_python use the PSPDbmCache option instead.

run( [vars, flush])
This method will execute the code (produced at object initialization time by parsing and compiling the PSP source). Optional argument vars is a dictionary keyed by strings that will be passed in as global variables. Optional argument flush is a boolean flag indicating whether output should be flushed. The default is not to flush output.
Additionally, the PSP code will be given global variables req, psp, session and form. A session will be created and assigned to session variable only if session is referenced in the code (the PSP handler examines co_names of the code object to make that determination). Remember that a mere mention of session will generate cookies and turn on session locking, which may or may not be what you want. Similarly, a mod_python FieldStorage object will be instantiated if form is referenced in the code.

The object passed in psp is an instance of PSPInterface.

display_code( )
Returns an HTML-formatted string representing a side-by-side listing of the original PSP code and resulting Python code produced by the PSP parser.
Here is an example of how PSP can be used as a templating mechanism:

The template file:



Hello, !

The handler code:
from mod_python import apache, psp

def handler(req):
template = psp.PSP(req, filename='template.html')
template.run({'what':'world'})
return apache.OK
class PSPInterface( )
An object of this class is passed as a global variable psp to the PSP code. Objects of this class are instantiated internally and the interface to __init__ is purposely undocumented.
set_error_page( filename)
Used to set a psp page to be processed when an exception occurs. If the path is absolute, it will be appended to document root, otherwise the file is assumed to exist in the same directory as the current page. The error page will receive one additional variable, exception, which is a 3-tuple returned by sys.exc_info().
apply_data( object[, **kw])
This method will call the callable object object, passing form data as keyword arguments, and return the result.
redirect( location[, permanent=0])
This method will redirect the browser to location location. If permanent is true, then MOVED_PERMANENTLY will be sent (as opposed to MOVED_TEMPORARILY).
Note: Redirection can only happen before any data is sent to the client, therefore the Python code block calling this method must be at the very beginning of the page. Otherwise an IOError exception will be raised.
Example:



Additionally, the psp module provides the following low level functions:

parse( filename[, dir])
This function will open file named filename, read and parse its content and return a string of resulting Python code.

If dir is specified, then the ultimate filename to be parsed is constructed by concatenating dir and filename, and the argument to include directive can be specified as a relative path. (Note that this is a simple concatenation, no path separator will be inserted if dir does not end with one).

parsestring( string)
This function will parse contents of string and return a string of resulting Python code.
0/5000
จาก: -
เป็น: -
ผลลัพธ์ (ไทย) 1: [สำเนา]
คัดลอก!
psp ของโมดูลมีวิธีการแปลงเอกสารข้อความ (รวมถึง แต่ไม่ จำกัด เฉพาะเอกสาร html) ที่มีรหัสหลามที่ฝังอยู่ในวงเล็บพิเศษลงในรหัสหลามบริสุทธิ์เหมาะสำหรับการดำเนินการในการจัดการ mod_python จึงให้กลไกที่หลากหลายสำหรับการส่งเนื้อหาแบบไดนามิกใน รูปแบบคล้ายกับงูเห่า JSP และอื่น ๆ .

ตัวแยกวิเคราะห์ที่ใช้โดย psp ของถูกเขียนใน C (สร้างขึ้นโดยใช้เฟล็กซ์) และดังนั้นจึงเป็นไปอย่างรวดเร็วมาก.

เห็น 7.2 `` จัดการ psp ของ'' สำหรับข้อมูลเพิ่มเติม psp ของ.

ภายในเอกสารรหัสหลามจะต้องมีการล้อมรอบด้วย "< % "และ"%> " การแสดงออกหลามจะอยู่ใน "<% =" และ "%>" คำสั่งที่สามารถใส่ไว้ใน "<% @" และ "%>"ความคิดเห็น (ซึ่งจะไม่เป็นส่วนหนึ่งของรหัสผล) สามารถใส่ไว้ใน "<% -" และ "-%>"

นี่คือหน้า psp ของดั้งเดิมที่แสดงให้เห็นถึงการใช้งานของทั้งสองรหัสและการแสดงออกที่ฝังอยู่ใน html ที่ เอกสาร:


<%

เวลานำเข้า%>
โลกสวัสดีเวลา: <% = time.strftime ("% Y-%-m% d,% h: m%:% s" )%>

ภายในpsp ของ parser จะแปลหน้าดังกล่าวข้างต้นเป็นรหัสหลามต่อไปนี้

req.write ("" "
" "")

เวลานำเข้า req.write ("" "
โลกสวัสดีเวลาคือ "" "); req.write (STR (time.strftime ("% Y-%-m% d,% h: m%:% s "))); req.write (" ""

"" ")
รหัสนี้เมื่อดำเนินการจัดการภายในจะส่งผลในหน้าแสดงคำ" สวัสดีโลกเวลาที่. "ตามด้วยเวลาปัจจุบัน

รหัสหลามสามารถใช้ในการส่งออกชิ้นส่วนของหน้าเว็บหรือเงื่อนไขในลูป บล็อกจะแสดงจากภายในรหัสหลามโดยเยื้อง เยื้องล่าสุดในรหัสหลาม (ถึงแม้ว่ามันจะเป็นความเห็น) จะยังคงผ่านเอกสารไปจนถึงวันสิ้นสุดของเอกสารอย่างใดอย่างหนึ่งหรือรหัสหลามมากขึ้น

นี่คือตัวอย่าง:.


<%
n การอยู่ในช่วง ( 3):
#เยื้องนี้จะยังคงมี
%>
วรรคนี้จะ
ทำซ้ำ 3 ครั้ง.
<%
#สายนี้จะทำให้เกิดการปิดกั้นที่จะจบ
%>
บรรทัดนี้จะแสดงเฉพาะครั้ง.


ข้างต้นจะถูกแปลภายในเพื่อ รหัสหลามต่อไปนี้

req.write ("" "
" "")
n การอยู่ในช่วง (3):
#เยื้องนี้จะยังคงมี
req.write ("" "
วรรคนี้ จะ
ซ้ำ 3 ครั้ง.
"" ")
#สายนี้จะทำให้เกิดการป้องกันที่จะจบ
req.write (" ""
บรรทัดนี้จะแสดงเฉพาะเมื่อ


"" ")
parser ยังเป็นสมาร์ทพอที่จะคิดออกเยื้องถ้าบรรทัดสุดท้ายของงูหลามลงท้ายด้วย".. "(ลำไส้ใหญ่) พิจารณานี้ และที่เยื้องถูกรีเซ็ตเมื่อขึ้นบรรทัดใหม่ที่พบใน "<%%>" หน้าดังกล่าวข้างต้นสามารถเขียนเป็น:


<%
n การอยู่ในช่วง (3):
%>
< p> วรรคนี้จะถูก
ซ้ำ 3 ครั้ง.
<%
%>
บรรทัดนี้จะแสดงเฉพาะครั้ง.


แต่รหัสดังกล่าวอาจสร้างความสับสนจึงมีความเห็นบรรยายแสดงถึงบล็อกขอแนะนำเป็นวิธีที่ดี.

สั่งเพียงการสนับสนุนในขณะนี้คือ รวมถึงที่นี่เป็นวิธีการที่จะสามารถใช้:

<% @ รวมไฟล์ = "/ file / เพื่อ / รวม"%>
ถ้าแจง () ฟังก์ชันที่ถูกเรียกว่ามีข้อโต้แย้ง dir,แล้วไฟล์ที่สามารถระบุเป็นเส้นทางสัมพันธ์อย่างอื่นก็จะมีแน่นอน

ชั้น psp ของ (req [ชื่อไฟล์สตริง vars])
ชั้นนี้แสดงให้เห็นถึงวัตถุ psp ของ
req เป็นวัตถุคำขอ.. ชื่อไฟล์ และสตริงข้อโต้แย้งคำหลักเป็นตัวเลือกซึ่งระบุแหล่งที่มาของรหัส psp ของ เพียงหนึ่งในเหล่านี้จะสามารถระบุ ถ้าไม่ได้ระบุ req.filename ถูกนำมาใช้เป็นชื่อไฟล์.

Vars เป็นพจนานุกรมของตัวแปรทั่วโลก Vars ผ่านในการทำงาน () วิธีการจะแทนที่ Vars ผ่านในที่นี่.

ชั้นนี้ถูกนำมาใช้ภายในโดยตัวจัดการ PSP, แต่ยังสามารถใช้เป็นเครื่องมือ templating วัตถุประสงค์ทั่วไป.

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

แคชถูก จำกัด ไว้ที่ 512 หน้าซึ่งขึ้นอยู่กับขนาดของหน้าเว็บที่อาจจะครอบครองเป็นจำนวนมากของหน่วยความจำ ถ้าหน่วยความจำมีความกังวลแล้วคุณสามารถสลับไปยังแคชไฟล์ dBmการทดสอบอย่างง่ายของเราแสดงให้เห็นว่าผลการดำเนินงานเพียง 20% ช้า BSD ใช้ฐานข้อมูล คุณจะต้องตรวจสอบการดำเนินงาน anydbm ค่าเริ่มต้นในระบบของคุณเป็นห้องสมุด dBm ในบางกำหนดขีด จำกัด กับขนาดของรายการทำให้พวกเขาไม่เหมาะสม แคช dBm สามารถเปิดใช้งานผ่านทางตัวเลือกหลาม mod_python.psp.cache_database_filename เช่น:

pythonoption mod_python.psp.cache_database_filename `` / tmp / pspcache.dbm''
ทราบว่าไฟล์แคช dBm จะไม่ถูกลบเมื่อรีสตาร์ทเซิร์ฟเวอร์.
แตกต่างกับไฟล์วัตถุรหัสที่เกิดจากสายจะถูกเก็บไว้ในหน่วยความจำเท่านั้น มีตัวเลือกในการแคชไฟล์ dBm ในเวลานี้ไม่มี.

ทราบว่าชื่อดังกล่าวข้างต้นสำหรับการตั้งค่าตัวเลือกที่ได้รับการเปลี่ยนแปลงเฉพาะค่านี้ใน mod_python 3.3หากคุณต้องการที่จะรักษาความเข้ากันได้ย้อนหลังกับรุ่นเก่าของ mod_python ใช้ตัวเลือก pspdbmcache แทน.

ทำงาน ([Vars ล้าง])
วิธีการนี​​้จะรันโค้ด (ผลิตในเวลาที่วัตถุเริ่มต้นโดยการแยกและรวบรวมแหล่งขาย psp) อาร์กิวเมนต์ตัวเลือก vars เป็นพจนานุกรมคีย์โดยสตริงที่จะถูกส่งผ่านไปในตัวแปรทั่วโลกเป็นล้างอาร์กิวเมนต์ตัวเลือกเป็นธงบูลีนระบุว่าการส่งออกควรจะล้าง เริ่มต้นไม่ได้ที่จะล้างออก.
นอกจากนี้รหัส psp ของจะได้รับตัวแปรทั่วโลก req, psp ของเซสชั่นและรูปแบบ เซสชั่นจะถูกสร้างขึ้นและกำหนดให้กับตัวแปรเซสชั่นเฉพาะในกรณีที่เซสชั่นมีการอ้างอิงในรหัส (การจัดการตรวจสอบ psp ของ co_names ของวัตถุรหัสเพื่อให้การกำหนดว่า)จำไว้ว่าการกล่าวถึงเพียงของเซสชั่นจะสร้างคุกกี้และเปิดล็อคเซสชั่นซึ่งอาจจะหรืออาจจะไม่ได้สิ่งที่คุณต้องการ ในทำนองเดียวกันวัตถุ mod_python fieldstorage จะ instantiated ถ้ารูปแบบมีการอ้างอิงในรหัส.

วัตถุผ่านใน psp ของเป็นตัวอย่างของ pspinterface.

display_code ()
. ส่งกลับสตริง html ที่จัดรูปแบบที่เป็นตัวแทนของรายการที่ด้านข้างของรหัส psp ของเดิมและทำให้เกิดรหัสหลามที่ผลิตโดยแยกวิเคราะห์
psp ของที่นี่เป็นตัวอย่างของวิธี psp ของที่สามารถใช้เป็นกลไก templating:

แฟ้มแม่แบบ :


<-! นี้เป็นแม่แบบ psp ของง่ายที่เรียกว่า template.html ->
สวัสดี <% = สิ่งที่%>

รหัสดำเนิน! :
จาก apache นำเข้า mod_python, psp ของ

จัดการ def (req):
แม่ = psp.psp (req ชื่อไฟล์ = 'template.html')
template.run ({'สิ่ง': 'โลก'})

กลับ apache.ok ชั้น pspinterface ()
วัตถุของคลาสนี้ถูกส่งเป็น psp ของตัวแปรทั่วโลกเพื่อ psp ของรหัส วัตถุของคลาสนี้จะมีอินสแตนซ์ภายในและอินเตอร์เฟซ __ init__ จะไม่มีเอกสารจงใจ.
set_error_page (ชื่อไฟล์)
ใช้ในการตั้งหน้า psp ของที่ต้องดำเนินการเมื่อเกิดข้อยกเว้น ถ้าเส้นทางที่แน่นอนก็จะถูกผนวกเข้ากับรากเอกสารมิฉะนั้นไฟล์จะถือว่าอยู่ในไดเรกทอรีเดียวกันกับหน้าปัจจุบัน หน้าข้อผิดพลาดจะได้รับอย่างใดอย่างหนึ่งตัวแปรเพิ่มเติมข้อยกเว้นซึ่งเป็น 3-tuple กลับโดย sys.exc_info ().
apply_data (วัตถุ [** กิโลวัตต์])
วิธีการนี​​้จะเรียกวัตถ​​ุ callable,ส่งผ่านข้อมูลแบบเป็นอาร์กิวเมนต์คำหลักและกลับผล.
เปลี่ยนเส้นทาง (ตำแหน่ง [ถาวร = 0])
วิธีการนี​​้จะเปลี่ยนเส้นทางเบราว์เซอร์ไปยังตำแหน่งที่ ถ้าถาวรเป็นจริงแล้ว moved_permanently จะถูกส่ง (เมื่อเทียบกับ moved_temporarily)
หมายเหตุ:. เปลี่ยนเส้นทางสามารถเกิดขึ้นได้ก่อนที่ข้อมูลใด ๆ ที่ถูกส่งไปยังลูกค้าดังนั้นการป้องกันรหัสหลามเรียกวิธีการนี​​้จะต้องเป็นในช่วงเริ่มต้นของหน้า อย่างอื่นยกเว้น IOError จะได้รับการเลี้ยงดู
. เช่น:

<%

#ทราบว่า '<' ข้างต้นเป็นไบต์แรกของหน้า psp.redirect
('http://www.modpython.org')!
%>

นอกจากนี้โมดูล psp ของฟังก์ชั่นให้อยู่ในระดับต่ำต่อไปนี้

แจง (ชื่อไฟล์ [dir])
ฟังก์ชั่นนี้จะเปิดไฟล์ชื่อไฟล์อ่านและแยกเนื้อหาและกลับสตริงของผลรหัสหลาม.

ถ้า dir ระบุแล้วชื่อไฟล์ที่ดีที่สุดที่จะแยกถูกสร้างโดยเชื่อมโยง dir และชื่อไฟล์และข้อโต้แย้งที่จะรวมคำสั่ง สามารถระบุเป็นเส้นทางสัมพันธ์ (โปรดทราบว่านี้คือการเชื่อมง่ายคั่นเส้นทางจะไม่มีการแทรกถ้า dir ไม่ได้จบด้วยหนึ่ง).

parsestring (สตริง)
ฟังก์ชั่นนี้จะแยกเนื้อหาของสตริงและกลับสตริงของผลรหัสหลาม
การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 2:[สำเนา]
คัดลอก!
โมดูล psp แสดงวิธีการแปลงเอกสารข้อความ (รวมถึง แต่ไม่จำกัดเฉพาะเอกสาร HTML) ประกอบด้วยงูเหลือมรหัสฝังในเล็บพิเศษเป็นรหัสงูบริสุทธิ์เหมาะสำหรับการดำเนินการภายในตัวจัดการ mod_python กลไกที่หลากหลายสำหรับการส่งมอบเนื้อหาแบบไดนามิกในลักษณะคล้ายกับ ASP สาทร และอื่น ๆ ให้

ตัวแยกวิเคราะห์ที่ใช้ psp ถูกเขียนใน C (โดยยืดหยุ่น) และจึงรวดเร็วมากขึ้น

ดู 7.2 นิ้ว PSP จัดการ '' สำหรับเพิ่มเติม PSP ข้อมูล

ภายในเอกสาร งูเหลือมรหัสต้องถูกล้อมรอบด้วย " < %" และ "% > " นิพจน์งูจะอยู่ใน " < % =" และ "% > " สามารถใส่คำสั่ง " < % @" และ "% > " ได้ สามารถใส่ข้อคิดเห็น (ซึ่งจะไม่มีส่วนของรหัสผลลัพธ์) " < %-" และ "-% > "

นี่คือหน้า PSP ดั้งเดิมที่แสดงรหัสและนิพจน์ที่ฝังอยู่ในเอกสาร HTML:


< %
นำเข้าเวลา
% >
สวัสดี เวลาเป็น: < %=time.strftime ("%Y-%m-%d, % H: % m:"% S") % >

ภายใน ตัวแบ่งที่ PSP จะแปลหน้าดังกล่าวเป็นงูเหลือมรหัสต่อไปนี้:

req.write ("" "
" "")
นำเข้าเวลา
req.write ("" "
สวัสดี เวลาเป็น: " ""); req.write (str (time.strftime ("%Y-%m-%d, % H: % m:"% S"))); req.write ("" "

" "")
นี้รหัส ใช้ภายในตัวจัดการจะทำให้เพจที่แสดงคำ "สวัสดี เวลาเป็น: " ตามเวลาปัจจุบัน

งูเหลือมรหัสสามารถใช้ส่วนของหน้าแสดงผลอย่างมีเงื่อนไข หรือวนรอบ บล็อกจะสามารถบุจากภายในรหัสงู โดยเยื้อง ย่อหน้าสุดท้ายในรหัสงู (แม้จะเห็น) จะคงอยู่ผ่านเอกสารจนถึงการสิ้นสุดของเอกสารขึ้นมากกว่างูเหลือมรหัส

ตัวอย่าง:


< %
สำหรับ n ใน range(3):
#เยื้องนี้จะคงอยู่
% >
ย่อหน้านี้จะ
ทำซ้ำ 3 ครั้ง
< %
#บรรทัดนี้จะทำให้บล็อกจบ
% >
บรรทัดนี้จะแสดงเฉพาะครั้ง


ด้านบนจะเป็นภายในแปลงูเหลือมรหัสต่อไปนี้:

req.write ("" "
" "")
สำหรับ n ใน range(3):
#เยื้องนี้จะคงอยู่
req.write ("" "
ย่อหน้านี้จะ
ซ้ำ 3 ครั้ง
"" ")
#บรรทัดนี้จะทำให้บล็อกจบ
req.write (" ""
บรรทัดนี้จะแสดงขึ้นเพียงครั้งเดียว


"" ")
ตัวแยกวิเคราะห์ก็ฉลาดพอที่จะคิดออกเยื้องถ้าบรรทัดสุดท้ายของงูเหลือมที่ลงท้ายด้วย": " (ทวิภาค) พิจารณานี้ และที่ เยื้องถูกรีเซ็ตเมื่อพบบรรทัดใหม่ไว้เป็นภายใน "<% >" หน้าข้างต้นสามารถเขียนเป็น:


< %
สำหรับ n ใน range(3):
% >
ย่อหน้านี้จะ
ซ้ำ 3 ครั้ง
<%
%>
บรรทัดนี้จะแสดงขึ้นเพียงครั้งเดียว


อย่างไรก็ตาม รหัสข้างต้นอาจมีความสับสน คำแนะนำจึง มีความเห็นเป็นคำอธิบายกำหนดเรียกค่าบล็อกเป็นดีฝึกการ

เป็นคำสั่งเฉพาะที่ได้รับการสนับสนุนในขณะนี้รวม นี่คือสามารถใช้วิธี:

< %@รวมถึงมีเรียกฟังก์ชัน parse() ด้วยอาร์กิวเมนต์ dir, file="/file/to/include"%>
If แล้วสามารถระบุแฟ้มเป็นญาติเส้น อื่น ๆ มีเป็น สัมบูรณ์

เรียน PSP (req, [, แฟ้ม สตริง vars])
คลาสนี้แทนวัตถุ PSP
req เป็นวัตถุคำ ชื่อแฟ้มและสตริงที่มีอาร์กิวเมนต์ตัวเลือกสำคัญที่บ่งชี้แหล่งที่มาของรหัส PSP สามารถระบุเพียงหนึ่งเหล่านี้ ถ้าไม่มีระบุ req.filename จะใช้เป็นชื่อไฟล์.

vars เป็นพจนานุกรมของตัวแปรส่วนกลาง Vars ผ่านวิธี run() จะแทน vars ผ่านในที่นี่

ชั้นนี้ถูกใช้ภายใน โดยตัวจัดการ PSP แต่ยังสามารถใช้เป็นการทั่วไป templating เครื่องมือการ

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

แคถูกจำกัดไป 512 หน้า ซึ่งขึ้นอยู่กับขนาดของหน้าอาจครอบครองจำนวนหน่วยความจำอย่างมีนัยสำคัญ ถ้าจำเป็นกังวล แล้วคุณสามารถสลับไปแคแฟ้ม dbm ทดสอบง่าย ๆ ของเราพบเพียง 20% ช้าประสิทธิภาพใช้ bsd db คุณอาจต้องการตรวจสอบที่ anydbm ใช้งานค่าเริ่มต้นบนระบบของคุณเป็นไลบรารีบาง dbm กำหนดข้อจำกัดขนาดของรายการที่ทำไม่เหมาะสม แค Dbm สามารถใช้งานผ่าน mod_python.psp.cache_database_filename งูเลือก e.g.:

PythonOption mod_python.psp.cache_database_filename '' /tmp/pspcache.dbm''
โปรดสังเกตว่าแฟ้มแคชของ dbm ไม่ลบเมื่อเริ่มระบบใหม่เซิร์ฟเวอร์
ไม่เหมือนกับแฟ้ม รหัสวัตถุเกิดจากสายอักขระจะถูกเก็บไว้ในหน่วยความจำเท่านั้น มีไม่มีตัวเลือกการแคชของแฟ้ม dbm ที่เวลานี้

หมายเหตุว่า ชื่อข้างต้นสำหรับการตั้งค่าตัวเลือกได้ถูกเปลี่ยนแปลงเฉพาะค่านี้ใน mod_python 3.3 ถ้าคุณต้องการรักษาย้อนหลัง ความเข้ากันได้กับรุ่นเก่า mod_python ใช้ตัว PSPDbmCache แทน

รัน ([vars ล้าง])
วิธีการนี้จะดำเนินการรหัส (ผลิตที่เวลาเริ่มต้นของวัตถุ โดยแยกวิเคราะห์ และคอมไพล์ต้น PSP) ไม่จำเป็นอาร์กิวเมนต์ vars พจนานุกรม keyed โดยสายที่จะผ่านในเป็นตัวแปรส่วนกลางได้ อาร์กิวเมนต์ตัวเลือกล้างค่าสถานะบูลีบ่งชี้ว่า ควรล้างออกได้ เริ่มต้นจะไม่ล้างออก
นอกจากนี้ รหัส PSP จะได้รับตัวแปรส่วนกลาง req, psp งาน และแบบฟอร์ม เซสชันจะถูกสร้าง และกำหนดให้ตัวแปรเซสชันเฉพาะเซสชันถูกอ้างอิงในรหัส (จัดการ PSP ตรวจสอบ co_names ของวัตถุรหัสที่กำหนดให้) จำไว้ว่า การเอ่ยถึงเพียงของเซสชันจะสร้างคุกกี้ และเปิดในเซสชันล็อก ซึ่งอาจ หรืออาจเป็นสิ่งที่คุณต้อง ว่าจะสามารถสร้างอินสแตนซ์การ mod_python FieldStorage วัตถุในทำนองเดียวกัน ถ้าแบบฟอร์มมีการอ้างอิงในรหัส

ผ่านใน psp เป็นอินสแตนซ์ของ PSPInterface

(display_code)
กลับเป็นสตริงจัดรูปแบบ HTML ที่แสดงเป็น--เคียงข้างรายการของรหัส PSP เดิม และผลผลิต โดยแยกวิเคราะห์ PSP รหัสงู
นี่คือตัวอย่างของวิธีการใช้ PSP เป็นกลไก templating:

file:


แม่ < ! -เป็นแบบ psp อย่างที่เรียกว่า template.html-->
สวัสดี <%=what%> !

รหัสจัดการ:
จาก mod_python อะแพชี psp นำเข้า

def handler(req):
แม่ = pspPSP (req, filename='template.html')
template.run({'what':'world'})
กลับอะแพชีOK
คลา(PSPInterface)
วัตถุระดับนี้จะถูกส่งผ่านเป็น psp เป็นตัวแปรส่วนกลางรหัส PSP วัตถุของคลาสนี้จะสร้างอินสแตนซ์ภายใน และอินเทอร์เฟสสำหรับ __init__ ได้จงใจ undocumented
set_error_page (ชื่อแฟ้ม)
ใช้การตั้งค่าหน้า psp ที่จะประมวลผลเมื่อเกิดข้อยกเว้น ถ้าเส้นทางไม่แน่นอน มันจะผนวกเข้ากับเอกสารหลัก มิฉะนั้นแฟ้มสันนิษฐานมีอยู่ในไดเรกทอรีเดียวกับเพจปัจจุบัน หน้าข้อผิดพลาดจะได้รับหนึ่งตัวแปรเพิ่มเติม ยกเว้น ซึ่งเป็นทู 3-เพิลได้จาก sys.exc_info () .
apply_data (วัตถุ [, ** kw])
วิธีการนี้จะเรียกวัตถุวัตถุ callable ส่งข้อมูลฟอร์มเป็นอาร์กิวเมนต์สำคัญ และส่งคืนผลลัพธ์การ
เปลี่ยนเส้นทาง (ตำแหน่ง [, ถาวร = 0])
วิธีการนี้จะเปลี่ยนเส้นทางเบราว์เซอร์ไปยังตำแหน่งที่ตั้ง ถ้าถาวรเป็นจริง จะ ส่ง MOVED_PERMANENTLY (ตรงข้ามกับ MOVED_TEMPORARILY) .
หมายเหตุ: การเปลี่ยนเส้นทางเฉพาะสามารถเกิดขึ้นก่อนที่ข้อมูลจะถูกส่งไปยังไคลเอนต์ ดังนั้น บล็อกรหัสงูที่เรียกวิธีการนี้ต้องเป็นที่เริ่มต้นของหน้า มิฉะนั้น จะมีข้อยกเว้น IOError raised.
Example:

<%

# หมายเหตุว่า ' <' เหนือเป็นไบต์แรกของ page!
psp.redirect ('http://www.modpython.org')
% >

นอกจากนี้ โมดูล psp มีหน้าที่สูง:

ในการแยกวิเคราะห์ (ชื่อแฟ้ม [ dir])
ฟังก์ชันนี้จะเปิดแฟ้มชื่อแฟ้ม อ่านแยกแยะเนื้อหา และส่งคืนสายอักขระของผลลัพธ์งูเหลือมรหัส

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

parsestring (สตริง)
ฟังก์ชันนี้จะแยกเนื้อหาของสายอักขระ และกลับสายรหัสงูเกิดขึ้น
การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 3:[สำเนา]
คัดลอก!
โมดูลที่ PSP ให้ทางในการแปลงข้อความเอกสาร(รวมถึงแต่ไม่จำกัด(มหาชน)ให้เป็น HTML เอกสาร)ที่มีรหัสไพธอนตัวยึดแบบฝังตัวในแบบพิเศษในบริสุทธิ์งูเหลือมรหัสเหมาะสำหรับการประมวลผล ภายใน mod_python การจัดการซึ่งจะส่งผลให้การให้ที่ใช้งานได้อเนกประสงค์กลไกการสำหรับการนำเสนอเนื้อหาแบบไดนามิกในสไตล์ที่คล้ายคลึงกับ ASP , jsp และอื่นๆ.

แจงที่ใช้โดยมีการเขียน PSP ใน C (สร้างขึ้นโดยใช้ flex )และได้ดังนั้นจึงเป็นอย่างมากอย่างรวดเร็ว.

ดู 7.2 " PSP จัดการ"สำหรับข้อมูลเพิ่มเติม PSP .

ภายใน เอกสาร,งูใหญ่รหัสความต้องการการถูกโอบล้อมไปด้วย"<%"และ"%>". นิพจน์งูใหญ่จะอยู่ใน"<%="และ"%>" แนวทางที่สามารถอยู่ใน"%@"และ"%>"ให้ความคิดเห็น(ซึ่งจะไม่เคยเป็นส่วนหนึ่งของที่เป็นผลรหัส)สามารถอยู่ใน"% - - "และ" - - :%>"

ที่นี่เป็นโบราณ PSP หน้าที่แสดงให้เห็นถึงการใช้ทั้งสองและรหัสการแสดงออกที่ฝังอยู่ในเอกสาร HTML :

< HTML >

%นำเข้าเวลา

%>สวัสดี World ,เวลาคือ:%=เวลา.ของ strftime ("% Y - % - % d ,% H :% s M :% s ")%>

ภายใน ,ที่ PSP แจงจะแปลที่อยู่เหนือหน้าเข้าไปในต่อไปนี้:รหัสไพธอน:

เมื่อมีการร้องขอ.เขียน( """ < HTML >
""" )

ตามมาตรฐานการนำเข้าเวลาเมื่อมีการร้องขอ.เขียน( """
สวัสดี World ,เวลาคือ: """ );เมื่อมีการร้องขอ.เขียน( STR (เวลา.ของ strftime ("% Y - % - % d ,% H :% s M :% s " ))) ;เมื่อมีการร้องขอ.เขียน( """

""" )
นี้โค้ด,เมื่อดำเนินการ ภายใน ที่จะส่งผลให้การจัดการในหน้าแสดงคำว่า"สวัสดีโลกเวลาคือ:"ตามด้วยเวลาปัจจุบัน.

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

ที่นี่เป็นตัวอย่าง:

< HTML >

%สำหรับ n ในช่วง( 3 ):
#นี้เยื้องจะยืนกราน

%>< p >วรรคนี้จะเป็นสัญลักษณ์
ทำซ้ำ 3 ครั้ง.

#%สินค้านี้จะทำให้ตึกเพื่อสิ้นสุด

%>สายนี้จะถูกนำมาแสดงครั้ง< br >

ที่ด้านบนจะถูกแปลไป ภายใน ต่อไปนี้รหัสไพธอน:

เมื่อมีการร้องขอ.เขียน( """ < HTML >
""" )
สำหรับ n ในช่วง( 3 ):
#นี้เยื้องจะยืนกราน
เมื่อมีการร้องขอ.เขียน( """
< p >วรรคนี้จะตอบแทน
ซ้ำ 3 ครั้ง.
""" )
#สินค้านี้จะทำให้ตึกเพื่อสิ้นสุด
เมื่อมีการร้องขอ.เขียน( """
สายนี้จะถูกนำมาแสดงอีกครั้ง.แจง< br >

""" )
ยังเป็นอัจฉริยะพอที่จะออกไปเยื้องที่หากสายสุดท้ายของงูหลามจะสิ้นสุดลงด้วย" - - : - - "(เครื่องหมายโคลอน)เท่านั้น การพิจารณานี้และที่มีการรีเซ็ตเยื้อง$ NEWLINE $ที่พบใน"<%%>",ด้านบนหน้าสามารถเขียนเป็น:

< HTML >

<%สำหรับ n ในช่วง( 3 ):

%>< p >วรรคนี้จะ
ซ้ำ 3 ครั้ง.

<%%>
สินค้านี้จะมีการแสดงอีกครั้งหนึ่ง.< br >

อย่างไรก็ตาม,ที่อยู่เหนือรหัสจะสามารถทำให้เกิดความสับสนซึ่งมีความหมายความคิดเห็นแสดงว่าช่วงตึกได้รับการแนะนำเป็นอย่างดีการปฏิบัติ.

เท่านั้น Directive ที่สนับสนุนในเวลานี้คือรวมถึงต่อไปนี้คือวิธีการและสามารถใช้งาน:

<%@รวมถึงไฟล์="/ไฟล์/เพื่อไป/รวมถึง"%>
หากสามารถแจง()ทำงานได้รับการเรียกว่าไดเรกทอรีที่มีอาร์กิวเมนต์,แล้วไฟล์ที่สามารถกำหนดได้เป็นพาธญาติคนหนึ่งเป็นอย่างอื่นจะเป็นอย่างเด็ดขาด.

Class PSP (เมื่อมีการร้องขอ[ชื่อแฟ้มสตริงตัวแทนจำหน่ายรายย่อย( VAR )])
- class แห่งนี้เป็นวัตถุ PSP .
เมื่อมีการร้องขอเป็นวัตถุการร้องขอที่สตริงและชื่อไฟล์มีอาร์กิวเมนต์คำหลักซึ่งเป็นอุปกรณ์เสริมที่ระบุแหล่งที่มาของรหัส PSP ได้. เพียงคนเดียวของเหล่านี้สามารถกำหนด หากไม่มีการระบุเมื่อมีการร้องขอ.ชื่อแฟ้มถูกใช้เป็นชื่อไฟล์.

ตัวแทนจำหน่ายรายย่อย( VAR )คือพจนานุกรมของตัวแปรระดับโลก ตัวแทนจำหน่ายรายย่อย( VAR )ผ่านไปแล้วในการที่()วิธีการจะใช้แทนตัวแทนจำหน่ายรายย่อย( VAR )ผ่านไปในที่นี่.

Class แห่งนี้คือใช้ ภายใน โดยการจัดการ PSP แต่สามารถใช้เป็นการทั่วไปดอทเครื่องมือ.

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

แคชที่มีจำกัด(มหาชน)ถึง 512 หน้าซึ่งขึ้นอยู่กับขนาดของหน้าที่ไม่ครอบคลุมจำนวนมากที่อาจเกิดขึ้นของหน่วยความจำ หากมีการติดตั้งหน่วยความจำของความกังวลแล้วคุณสามารถสลับไปยังแคชไฟล์ dBmการทดสอบแบบเรียบง่ายของเราแสดงให้เห็น ประสิทธิภาพ การทำงานเพียง 20% ช้าลงโดยใช้ลักษณะเป็น BSD dB คุณจะต้องใช้ในการตรวจสอบซึ่งเป็นค่าดีฟอลต์ anydbm การนำไปใช้งานในระบบของคุณกับไลบรารี dBm บางส่วนกำหนดการจำกัดขนาดของรายการที่ทำให้ไม่เหมาะสม ทำการแคช dBm สามารถเปิดใช้งานผ่านทางตัวเลือกไพธอน mod_python . PSP . cache_database_filename เช่น:

pythonoption mod_python . PSP . cache_database_filename "/ tmp / pspcache . dBm "
โปรดสังเกตว่าแฟ้มแคช dBm จะไม่ถูกลบเมื่อเซิร์ฟเวอร์รีสตาร์ท
ไม่เหมือนกับไฟล์วัตถุรหัสที่เป็นผลจากสตริงที่มีแคชไว้ในหน่วยความจำเท่านั้น ไม่มีตัวเลือกในการแคชในไฟล์ dBm ที่เวลานี้.

โปรดทราบว่าชื่อด้านบนสำหรับการตั้งค่าตัวเลือกนี้ได้เปลี่ยนไปเป็นค่านี้ใน mod_python 3.3 เท่านั้นหากคุณจำเป็นต้องรักษาไว้ซึ่งความเข้ากันได้ของเวอร์ชั่นเก่าย้อนหลังพร้อมด้วยการใช้งานตัวเลือก mod_python pspdbmcache แทน.

รัน([ตัวแทนจำหน่ายรายย่อย( VAR )ติดตั้งแบบฝัง])
วิธีนี้จะเรียกใช้รหัส(ผลิตที่เวลาการเริ่มต้นใช้งานวัตถุโดยวิเคราะห์และรวบรวมแหล่ง PSP ) อาร์กิวเมนต์ตัวแทนจำหน่ายรายย่อย( VAR )เป็นอุปกรณ์เสริมเป็นพจนานุกรมที่พอดีโดยสตริงที่จะผ่านไปในระดับโลกเป็นตัวแปรอาร์กิวเมนต์อุปกรณ์เสริมติดตั้งแบบฝังมีธงตัวปฏิบัติการ Boolean ที่ระบุว่าไม่ว่าจะผลิตควรจะถูกชะล้าง ค่าดีฟอลต์ที่ไม่ใช่การติดตั้งแบบฝังเรียบเอาต์พุต.
นอกจากนี้ยังโค้ด PSP จะได้รับมอบแบบฟอร์มและเซสชัน PSP เมื่อมีการร้องขอตัวแปรระดับโลก เซสชันที่จะถูกสร้างขึ้นและได้รับมอบหมายให้เป็นแบบปรับได้หลายระดับเซสชันเท่านั้นหากจะอ้างถึงในรหัส(การจัดการ PSP จะตรวจสอบ co_names ของรหัสนั้นเพื่อทำให้การกำหนดที่)โปรดจำไว้ว่าที่กล่าวถึงเป็นเพียงเซสชันจะสร้างคุกกี้และทำการเปิดเซสชันการล็อคซึ่งอาจจะหรืออาจไม่ได้เป็นสิ่งที่คุณต้องการ ในทำนองเดียวกันวัตถุ fieldstorage mod_python จะ instantiated หากเป็นรหัสที่อ้างถึงใน.

วัตถุที่ผ่านมาใน PSP คือตัวอย่างหนึ่งของ display_code pspinterface .

()
กลับไปที่ HTML - จัดรูปแบบของสตริงเป็นตัวแทนอยู่ด้านข้างรายการของ PSP และรหัสส่งผลให้งูใหญ่รหัสผลิตขึ้นโดย PSP แจง.
ที่นี่เป็นตัวอย่างของการ PSP สามารถใช้เป็นกลไกการดอท:

ที่เทมเพลตไฟล์:

< HTML >

< H 1 >สวัสดี,<%=อะไร%>!

ที่จัดการรหัส:
จาก mod_python นำเข้า Apache , PSP

ความละเอียดสูง,การจัดการ(เมื่อมีการร้องขอ):
เทมเพลต= PSP . PSP (เมื่อมีการร้องขอ,ชื่อแฟ้ม='เทมเพลต. html ')
เทมเพลต.เรียกใช้({'ที่':'ระดับโลก'}:)
กลับ apache .ตกลง( OK )
Class pspinterface ()
วัตถุในโรงแรมแห่งนี้มีระดับโลกผ่านไปเป็นตัวแปร PSP ใน PSP รหัส. วัตถุในระดับนี้มี instantiated ภายใน และอินเตอร์เฟซให้กับ __init__ มีเจตนาโดยไม่แสดงหลักฐาน.
set_error_page (ชื่อไฟล์:)
ใช้ในการตั้งค่าหน้า PSP ในการได้รับการดำเนินการเมื่อเกิดสิ่งผิดปกติที่เกิดขึ้น. หากพาธที่มีอย่างแท้จริงมันจะเป็นการ root พ่วงท้ายเอกสารหรือไฟล์ที่จะถูกคาดหมายว่ามีอยู่ในไดเรกทอรีเดียวกันกับที่เป็นหน้าปัจจุบัน ข้อผิดพลาดของเพจนี้จะได้รับข้อยกเว้นข้อหนึ่งตัวแปรเพิ่มเติมซึ่งเป็น 3 - tuple ที่ส่งคืนโดย SYS . exc_info ()..
apply_data ( object[ **กิโลวัตต์])
วิธีนี้จะเรียกวัตถุวัตถุสามารถโทรได้ซึ่งลูกค้านั้นๆได้ผ่านข้อมูลแบบฟอร์มกลับมาและอาร์กิวเมนต์ที่ส่งผลให้คำว่า.
เปลี่ยนทิศทาง(ที่ตั้ง[แบบถาวร= 0 ])
วิธีนี้จะเปลี่ยนทิศทางเบราเซอร์ไปยังตำแหน่งที่ตั้ง หากถาวรเป็นความจริงแล้ว moved_permanently จะถูกส่งไป(ไม่เหมือนกับ moved_temporarily ). n หมายเหตุ:การเปลี่ยนทิศทางสามารถเกิดขึ้นก่อนข้อมูลจะถูกส่งไปยังเครื่องลูกข่ายที่เท่านั้นเป็นอาคารก่ออิฐรหัสไพธอนดังนั้นจึงเรียกวิธีนี้จะต้องเป็นที่ช่วงเวลาตอนต้นของหน้าที่ หรือมิเช่นนั้นแล้วที่ ioerror ยกเว้นจะมีการเปลี่ยนแปลง.
ตัวอย่างเช่น:

<%

#บันทึกไว้ด้วยว่าที่'<'ด้านบนเป็นที่แรก byte ของหน้า!
PSP . redirect (' http://www.modpython.org')
%>

นอกจากนี้, PSP โมดูลที่ช่วยให้ระดับต่ำต่อไปนี้:ฟังก์ชัน:

แจง(ชื่อไฟล์[,ไดเรกทอรี]:)
ฟังก์ชันนี้จะเปิดไฟล์ชื่อว่าอ่านชื่อไฟล์และไดเรกทอรีเนื้อหาของสตริงและกลับไปที่การส่งผลให้รหัสงูเหลือม.

หากไดเรกทอรีที่ระบุไว้และชื่อแฟ้มสูงสุดที่จะวิเคราะห์ได้รับการสร้างขึ้นโดย concatenating ไดเรกทอรีและชื่อไฟล์และอาร์กิวเมนต์ที่รวมถึง Directive สามารถระบุได้เป็นพาธญาติคนหนึ่ง (โปรดบันทึกไว้ด้วยว่าโรงแรมแห่งนี้คือ concatenation แบบเรียบง่ายพาธไม่มีเส้นแบ่งจะใส่ไดเรกทอรีหากไม่มีที่สิ้นสุดซึ่งพร้อมด้วยหนึ่ง).

parsestring (สตริง)
ฟังก์ชันนี้จะเข้าใจเนื้อหาของสตริงและกลับไปสตริงที่มารหัสไพธอน
การแปล กรุณารอสักครู่..
 
ภาษาอื่น ๆ
การสนับสนุนเครื่องมือแปลภาษา: กรีก, กันนาดา, กาลิเชียน, คลิงออน, คอร์สิกา, คาซัค, คาตาลัน, คินยารวันดา, คีร์กิซ, คุชราต, จอร์เจีย, จีน, จีนดั้งเดิม, ชวา, ชิเชวา, ซามัว, ซีบัวโน, ซุนดา, ซูลู, ญี่ปุ่น, ดัตช์, ตรวจหาภาษา, ตุรกี, ทมิฬ, ทาจิก, ทาทาร์, นอร์เวย์, บอสเนีย, บัลแกเรีย, บาสก์, ปัญจาป, ฝรั่งเศส, พาชตู, ฟริเชียน, ฟินแลนด์, ฟิลิปปินส์, ภาษาอินโดนีเซี, มองโกเลีย, มัลทีส, มาซีโดเนีย, มาราฐี, มาลากาซี, มาลายาลัม, มาเลย์, ม้ง, ยิดดิช, ยูเครน, รัสเซีย, ละติน, ลักเซมเบิร์ก, ลัตเวีย, ลาว, ลิทัวเนีย, สวาฮิลี, สวีเดน, สิงหล, สินธี, สเปน, สโลวัก, สโลวีเนีย, อังกฤษ, อัมฮาริก, อาร์เซอร์ไบจัน, อาร์เมเนีย, อาหรับ, อิกโบ, อิตาลี, อุยกูร์, อุสเบกิสถาน, อูรดู, ฮังการี, ฮัวซา, ฮาวาย, ฮินดี, ฮีบรู, เกลิกสกอต, เกาหลี, เขมร, เคิร์ด, เช็ก, เซอร์เบียน, เซโซโท, เดนมาร์ก, เตลูกู, เติร์กเมน, เนปาล, เบงกอล, เบลารุส, เปอร์เซีย, เมารี, เมียนมา (พม่า), เยอรมัน, เวลส์, เวียดนาม, เอสเปอแรนโต, เอสโทเนีย, เฮติครีโอล, แอฟริกา, แอลเบเนีย, โคซา, โครเอเชีย, โชนา, โซมาลี, โปรตุเกส, โปแลนด์, โยรูบา, โรมาเนีย, โอเดีย (โอริยา), ไทย, ไอซ์แลนด์, ไอร์แลนด์, การแปลภาษา.

Copyright ©2024 I Love Translation. All reserved.

E-mail: