Есть ли способ вызвать функцию python при нажатии на определенную ссылку на странице html?
Спасибо
Есть ли способ вызвать функцию python при нажатии на определенную ссылку на странице html?
Спасибо
Вам нужно будет использовать веб-фреймворк для маршрутизации запросов на Python, так как вы не можете сделать это только с помощью HTML. Flask - одна простая структура:
server.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('template.html')
@app.route('/my-link/')
def my_link():
print 'I got clicked!'
return 'Click.'
if __name__ == '__main__':
app.run(debug=True)
Шаблоны /template.html
<!doctype html>
<title>Test</title>
<meta charset=utf-8>
<a href="/my-link/">Click me</a>
Запустите его с помощью python server.py
, а затем перейдите к http://localhost:5000/. Сервер разработки не является безопасным, поэтому для развертывания вашего приложения просмотрите http://flask.pocoo.org/docs/0.10/quickstart/#deploying-to-a-web-server
Да, но не напрямую; вы можете установить обработчик onclick
для вызова функции JavaScript, которая построит объект XMLHttpRequest
и отправит запрос на страницу на вашем сервере. Эта страница на вашем сервере может, в свою очередь, быть реализована с использованием Python и делать все, что нужно.
Да. Если ссылка указывает на ваш веб-сервер, вы можете настроить свой веб-сервер для запуска любого кода при нажатии этой ссылки и вернуть результат этого кода в браузер пользователя. Существует много способов написать такой веб-сервер. Например, см. Django. Вы также можете использовать AJAX.
Если вы хотите запустить код в браузере пользователя, используйте Javascript.
Есть несколько способов сделать это, но тот, который лучше всего подходит для меня, - это использовать CherryPy. CherryPy - это минималистическая веб-инфраструктура python, которая позволяет запускать небольшой сервер на любом компьютере. Существует очень похожий вопрос на ваш fooobar.com/questions/519810/....
Код ниже сделает то, что вы хотите. Его пример 2 из учебника CherryPy.
import cherrypy
class HelloWorld:
def index(self):
# Let link to another method here.
return 'We have an <a href="showMessage">important message</a> for you!'
index.exposed = True
def showMessage(self):
# Here the important message!
return "Hello world!"
showMessage.exposed = True
import os.path
tutconf = os.path.join(os.path.dirname(__file__), 'tutorial.conf')
if __name__ == '__main__':
# CherryPy always starts with app.root when trying to map request URIs
# to objects, so we need to mount a request handler root. A request
# to '/' will be mapped to HelloWorld().index().
cherrypy.quickstart(HelloWorld(), config=tutconf)
else:
# This branch is for the test suite; you can ignore it.
cherrypy.tree.mount(HelloWorld(), config=tutconf)
Я лично использую CherryPy в сочетании с несколькими другими модулями и инструментами:
Я написал статью о Browser в качестве рабочего интерфейса пользователя с CherryPy, в котором представлены модули и инструменты, используемые и некоторые дополнительные ссылки, которые могут помочь.
В дополнение к запуску сценариев Python на сервере вы можете запускать скрипты Python на стороне клиента, используя Skulpt.