Nhúng HTML vào Python

Bằng cách tận dụng cả hai Mô-đun. digiweb và phiên bản PythonInsideHTML được sửa đổi một chút. zip từ máy chủ web Karrigell Python của dự án được cấp phép BSD để biến nó thành một thư viện độc lập. Có thể chạy nhúng Python trong tài liệu HTML có thể được thực thi trong thời gian chạy

Bên trong HTML

cú pháp

By enclosing Python statements within a <% %> tag the Python interpreter will execute said statements. In the following example a "stored_time" variable will be created and will save the time on the local scope.

<% import time %>
<% stored_time = time.strftime("%d:%m:%y",time.localtime(time.time())) %>

If enclosed with <%= %> it will evaluate the statement and replace the tag with the result of the executed statement. In the following example the HTML created will contain the day:month:year from the devices internal clock.

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>

thụt đầu dòng

Khai báo thụt đầu dòng

Một tệp được chuyển đổi thành mã Python, mã này phải được thụt lề theo quy tắc Python;

Vì vậy, hãy cẩn thận nếu bạn kết hợp Python và HTML

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 

Điều này sẽ hoạt động vì sau một vòng lặp hoặc một điều kiện, HTML sau sẽ được PIH tự động thụt vào

To decrement indentation, use <% end %> :

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 
    3 <% end %>
    4 

done

trong ví dụ này, "xong" sẽ được viết sau khi vòng lặp for kết thúc

Một ví dụ khác cho một nếu. khác.

    1 <% if i: %>
    2   output someting
    3 <% end %>
    4 <% else: %>
    5   output someting else
    6 <% end %>
    7 

done

(Don't forget the last <% end %> otherwise "done" would have the same indentation as line 5) But this :

    1 <% for i in range(10):
    2    data= '%s * %s' %(i,i) %>
    3     <%= i*i %> 
    4 

done

Sẽ không hoạt động, bởi vì sau câu lệnh in trên dòng 2, thụt đầu dòng trở về 0 (nó bắt đầu bằng HTML thuần túy)

Tag

Nếu bạn có mã phức tạp trong đó Python và HTML được trộn lẫn, hãy nhúng mã đó vào giữa các thẻ và

    1  
    2  <% for i in range(10):
    3    data= '%s * %s' %(i,i) %>
    4     <%= i*i %> 
    5  
    6  

Table

7 8 9 10 11 A cell

có nghĩa. từ giờ trở đi và cho đến khi thẻ khớp, hãy sử dụng thụt lề trong nguồn PIH và để nguyên như vậy để tạo mã Python Trong ví dụ trên, thụt lề được sử dụng cho đến dòng 5 và bỏ qua sau đó. Nếu bản thân thẻ được thụt vào, đoạn mã sau sẽ được thụt vào

    1   
    2     
    3       
    4       
    5     
    6     
    7     <% for i in range(10): %>
    8       
    9       
    10      
    11      
    12    
    13  NumberSquare<%= i %><%= i**2 %>

Trong dòng 7, <% được căn chỉnh nên mã Python sẽ không được thụt vào

Kịch bản kết thúc

Nếu bạn muốn thoát tập lệnh trước khi kết thúc tài liệu, hãy nhấn

________số 8

Ghi vào đầu ra HTML

Nếu bạn muốn ghi vào đầu ra HTML mà không sử dụng các thẻ đánh giá, bạn có thể viết trực tiếp vào đầu ra mã Python thông qua

py_code.write( " Heading " )

Ví dụ làm việc từ Python

Trong ví dụ này, chúng tôi sẽ tạo một trình xử lý chung cho một loại tệp cho máy chủ web bằng cách sử dụng Mô-đun. kỹ thuật số

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
0

Bây giờ bạn chỉ có thể tải lên một tệp kết thúc bằng a thông qua phần quản lý tệp Python của webui, sau đó chỉ cần điều hướng đến http. //device_address/filename

Ví dụ: tải lên phần sau (mẫu. pih) sẽ hiển thị thông tin về yêu cầu HTTP được chuyển đến http_handler. Mã Python được tạo bởi tập lệnh này được chạy trên cùng phạm vi với hàm http_handler để có quyền truy cập vào các đối số (loại, đường dẫn, tiêu đề, đối số)

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
1

Điều hướng trình duyệt của bạn đến "http. //device_address/template. pih" sẽ cung cấp cho bạn một trang hiển thị thông tin về yêu cầu HTTP

Các chương trước đã thảo luận về cách mở rộng Python, nghĩa là cách mở rộng chức năng của Python bằng cách đính kèm một thư viện các hàm C vào nó. Cũng có thể làm theo cách khác. làm phong phú thêm ứng dụng C/C++ của bạn bằng cách nhúng Python vào đó. Nhúng cung cấp cho ứng dụng của bạn khả năng triển khai một số chức năng của ứng dụng bằng Python thay vì C hoặc C++. Điều này có thể được sử dụng cho nhiều mục đích; . Bạn cũng có thể tự mình sử dụng nếu một số chức năng có thể được viết bằng Python dễ dàng hơn

Nhúng Python tương tự như mở rộng nó, nhưng không hoàn toàn. Sự khác biệt là khi bạn mở rộng Python, chương trình chính của ứng dụng vẫn là trình thông dịch Python, trong khi nếu bạn nhúng Python, chương trình chính có thể không liên quan gì đến Python — thay vào đó, một số phần của ứng dụng thỉnh thoảng gọi trình thông dịch Python

Vì vậy, nếu bạn đang nhúng Python, bạn đang cung cấp chương trình chính của riêng mình. Một trong những việc mà chương trình chính này phải làm là khởi tạo trình thông dịch Python. Ít nhất, bạn phải gọi hàm. Có các cuộc gọi tùy chọn để chuyển đối số dòng lệnh cho Python. Sau đó, bạn có thể gọi trình thông dịch từ bất kỳ phần nào của ứng dụng

Có một số cách khác nhau để gọi thông dịch viên. bạn có thể chuyển một chuỗi chứa các câu lệnh Python tới hoặc bạn có thể chuyển con trỏ tệp stdio và tên tệp (chỉ để nhận dạng trong thông báo lỗi) tới. Bạn cũng có thể gọi các thao tác cấp thấp hơn được mô tả trong các chương trước để xây dựng và sử dụng các đối tượng Python

Xem thêm

Các chi tiết về giao diện C của Python được đưa ra trong sách hướng dẫn này. Rất nhiều thông tin cần thiết có thể được tìm thấy ở đây

1. 1. Nhúng cấp độ rất cao

Hình thức nhúng Python đơn giản nhất là sử dụng giao diện cấp cao. Giao diện này nhằm thực thi tập lệnh Python mà không cần tương tác trực tiếp với ứng dụng. Ví dụ, điều này có thể được sử dụng để thực hiện một số thao tác trên một tệp

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
2

Hàm nên được gọi trước để thông báo cho trình thông dịch về đường dẫn đến thư viện thời gian chạy Python. Tiếp theo, trình thông dịch Python được khởi tạo với , tiếp theo là thực thi tập lệnh Python được mã hóa cứng để in ngày và giờ. Sau đó, cuộc gọi tắt trình thông dịch, tiếp theo là kết thúc chương trình. Trong một chương trình thực, bạn có thể muốn lấy tập lệnh Python từ một nguồn khác, có thể là thói quen soạn thảo văn bản, tệp hoặc cơ sở dữ liệu. Lấy mã Python từ một tệp có thể được thực hiện tốt hơn bằng cách sử dụng chức năng này, giúp bạn tránh được sự cố cấp phát dung lượng bộ nhớ và tải nội dung tệp

1. 2. Hơn cả mức độ nhúng rất cao. Tổng quan

Giao diện cấp cao cung cấp cho bạn khả năng thực thi các đoạn mã Python tùy ý từ ứng dụng của bạn, nhưng việc trao đổi các giá trị dữ liệu khá cồng kềnh. Nếu bạn muốn điều đó, bạn nên sử dụng các cuộc gọi cấp thấp hơn. Với chi phí phải viết thêm mã C, bạn có thể đạt được hầu hết mọi thứ

Cần lưu ý rằng việc mở rộng Python và nhúng Python là hoạt động hoàn toàn giống nhau, mặc dù mục đích khác nhau. Hầu hết các chủ đề được thảo luận trong các chương trước vẫn còn hiệu lực. Để thấy điều này, hãy xem mã mở rộng từ Python sang C thực sự làm gì

  1. Chuyển đổi giá trị dữ liệu từ Python sang C,

  2. Thực hiện một lời gọi hàm đến một thói quen C bằng cách sử dụng các giá trị đã chuyển đổi và

  3. Chuyển đổi các giá trị dữ liệu từ cuộc gọi từ C sang Python

Khi nhúng Python, mã giao diện sẽ

  1. Chuyển đổi giá trị dữ liệu từ C sang Python,

  2. Thực hiện một lệnh gọi hàm tới một thói quen giao diện Python bằng cách sử dụng các giá trị đã chuyển đổi và

  3. Chuyển đổi các giá trị dữ liệu từ cuộc gọi từ Python sang C

Như bạn có thể thấy, các bước chuyển đổi dữ liệu được hoán đổi đơn giản để phù hợp với hướng chuyển đổi ngôn ngữ khác nhau. Sự khác biệt duy nhất là thói quen mà bạn gọi giữa cả hai lần chuyển đổi dữ liệu. Khi mở rộng, bạn gọi một quy trình C, khi nhúng, bạn gọi một quy trình Python

Chương này sẽ không thảo luận về cách chuyển đổi dữ liệu từ Python sang C và ngược lại. Ngoài ra, việc sử dụng đúng tài liệu tham khảo và xử lý lỗi được cho là đã được hiểu. Vì các khía cạnh này không khác với việc mở rộng trình thông dịch, bạn có thể tham khảo các chương trước để biết thông tin cần thiết

1. 3. Nhúng thuần túy

Chương trình đầu tiên nhằm mục đích thực thi một hàm trong tập lệnh Python. Giống như trong phần về giao diện cấp cao, trình thông dịch Python không tương tác trực tiếp với ứng dụng (nhưng điều đó sẽ thay đổi trong phần tiếp theo)

Mã để chạy một hàm được xác định trong tập lệnh Python là

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
3

Mã này tải tập lệnh Python bằng cách sử dụng

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
41 và gọi hàm có tên trong
<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
42. Các đối số nguyên của nó là các giá trị khác của mảng
<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
43. Nếu bạn sử dụng chương trình này (hãy gọi cuộc gọi thực thi đã hoàn thành) và sử dụng nó để thực thi tập lệnh Python, chẳng hạn như

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
4

thì kết quả phải là

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
8

Mặc dù chương trình khá lớn so với chức năng của nó, nhưng phần lớn mã dành cho chuyển đổi dữ liệu giữa Python và C và để báo lỗi. Phần thú vị liên quan đến việc nhúng Python bắt đầu bằng

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
9

Sau khi khởi tạo trình thông dịch, tập lệnh được tải bằng cách sử dụng. Quy trình này cần một chuỗi Python làm đối số của nó, được xây dựng bằng quy trình chuyển đổi dữ liệu

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 
0

Sau khi tập lệnh được tải, tên chúng tôi đang tìm kiếm sẽ được truy xuất bằng cách sử dụng. Nếu tên tồn tại và đối tượng được trả về có thể gọi được, bạn có thể cho rằng đó là một hàm một cách an toàn. Sau đó, chương trình tiếp tục bằng cách xây dựng một bộ đối số như bình thường. Cuộc gọi đến hàm Python sau đó được thực hiện với

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 
1

Khi trả về hàm,

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
47 hoặc là
<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
48 hoặc chứa tham chiếu đến giá trị trả về của hàm. Đảm bảo phát hành tham chiếu sau khi kiểm tra giá trị

1. 4. Mở rộng nhúng Python

Cho đến thời điểm hiện tại, trình thông dịch nhúng Python không có quyền truy cập vào chức năng từ chính ứng dụng. API Python cho phép điều này bằng cách mở rộng trình thông dịch nhúng. Nghĩa là, trình thông dịch nhúng được mở rộng với các thủ tục do ứng dụng cung cấp. Mặc dù nghe có vẻ phức tạp nhưng nó không quá tệ. Chỉ cần tạm thời quên rằng ứng dụng khởi động trình thông dịch Python. Thay vào đó, hãy coi ứng dụng là một tập hợp các chương trình con và viết một số mã keo cho phép Python truy cập vào các chương trình đó, giống như bạn sẽ viết một tiện ích mở rộng Python bình thường. Ví dụ

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 
4

Chèn đoạn mã trên ngay phía trên hàm

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
49. Ngoài ra, hãy chèn hai câu lệnh sau trước lệnh gọi đến

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 
6

Hai dòng này khởi tạo biến

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
81 và làm cho hàm
<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
82 có thể truy cập được bằng trình thông dịch Python được nhúng. Với các tiện ích mở rộng này, tập lệnh Python có thể thực hiện những việc như

    1 <% for i in range(10): %>
    2 <%= i %>*<%= i %> :  <%= i*i %> 
9

Trong một ứng dụng thực tế, các phương thức sẽ hiển thị API của ứng dụng cho Python

1. 5. Nhúng Python vào C++

Cũng có thể nhúng Python vào chương trình C++; . Không cần phải tự biên dịch lại Python bằng C++

1. 6. Biên dịch và liên kết trong các hệ thống giống Unix

Việc tìm đúng cờ để chuyển đến trình biên dịch (và trình liên kết) của bạn để nhúng trình thông dịch Python vào ứng dụng của bạn không nhất thiết là chuyện nhỏ, đặc biệt là vì Python cần tải các mô-đun thư viện được triển khai dưới dạng phần mở rộng động C (tệp _______183) được liên kết với nó

Để tìm ra các cờ trình biên dịch và trình liên kết cần thiết, bạn có thể thực thi tập lệnh

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
84 được tạo như một phần của quá trình cài đặt (cũng có thể có sẵn tập lệnh
<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
85). Tập lệnh này có một số tùy chọn, trong đó những tùy chọn sau sẽ hữu ích trực tiếp cho bạn

  • <% import time %>
    <%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
    86 sẽ cung cấp cho bạn các cờ được đề xuất khi biên dịch

    <% import time %>
    <%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
    30

  • <% import time %>
    <%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
    87 sẽ cung cấp cho bạn các cờ được đề xuất khi liên kết

    <% import time %>
    <%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
    31

Ghi chú

Để tránh nhầm lẫn giữa một số cài đặt Python (và đặc biệt là giữa Python hệ thống và Python được biên dịch của riêng bạn), bạn nên sử dụng đường dẫn tuyệt đối tới

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
84, như trong ví dụ trên

Nếu quy trình này không phù hợp với bạn (không đảm bảo quy trình này sẽ hoạt động với tất cả các nền tảng giống Unix; tuy nhiên, chúng tôi hoan nghênh ) bạn sẽ phải đọc tài liệu hệ thống của mình về liên kết động và/hoặc kiểm tra

<% import time %>
<%= time.strftime("%d:%m:%y",time.localtime(time.time())) %>
89 của Python (sử dụng để tìm . Trong trường hợp này, mô-đun là một công cụ hữu ích để lập trình trích xuất các giá trị cấu hình mà bạn muốn kết hợp với nhau. Ví dụ

Làm cách nào để nhúng mã HTML vào Python?

HTML và CSS dành cho nhà phát triển Python .
Tạo tệp HTML đầu tiên của bạn. Tài liệu HTML. Khoảng trắng và định dạng văn bản. .
Tạo kiểu cho nội dung của bạn bằng CSS. Thêm màu sắc cho trang web của bạn. Thay đổi phông chữ. .
Xử lý HTML với Python. Lập trình viết HTML. .
Tiếp tục với HTML và CSS trong Python. JavaScript. .
Phần kết luận

Bạn có thể đặt HTML trong tệp Python không?

Chúng tôi có thể lưu bất kỳ lượng dữ liệu đầu vào nào vào tệp HTML trong python bằng cách sử dụng các ví dụ sau theo hai cách. ví dụ 1. Tạo một tệp HTML và lưu dữ liệu đầu vào vào đó.

Tôi có thể chạy mã HTML bằng Python không?

Tại PyconUS 2022, Anaconda đã tiết lộ một khung mới có tên là PyScript sử dụng python trong mã HTML để xây dựng ứng dụng. Bạn có thể sử dụng python trong mã HTML của mình . Bạn không cần phải biết javascript. PyScript không chỉ là HTML mà còn mạnh mẽ hơn nhờ hệ sinh thái phong phú và dễ tiếp cận của các thư viện Python.

Làm cách nào để kết xuất HTML bằng Python?

Trong hướng dẫn này, chúng ta sẽ học cách tạo mẫu trong Flask và tìm hiểu cách kết xuất các mẫu HTML. .
Đầu tiên, tạo một thư mục mới trong thư mục dự án có tên là mẫu. Tạo một tệp mới trong thư mục mẫu có tên là “home. html”. .
Bây giờ hãy mở ứng dụng. py và thêm đoạn mã sau. từ Flask nhập bình, render_template