Вызов функции python в html файле

Есть ли способ вызвать функцию python при нажатии на определенную ссылку на странице html?

Спасибо

Ответ 1

Вам нужно будет использовать веб-фреймворк для маршрутизации запросов на 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

Ответ 2

Да, но не напрямую; вы можете установить обработчик onclick для вызова функции JavaScript, которая построит объект XMLHttpRequest и отправит запрос на страницу на вашем сервере. Эта страница на вашем сервере может, в свою очередь, быть реализована с использованием Python и делать все, что нужно.

Ответ 3

Да. Если ссылка указывает на ваш веб-сервер, вы можете настроить свой веб-сервер для запуска любого кода при нажатии этой ссылки и вернуть результат этого кода в браузер пользователя. Существует много способов написать такой веб-сервер. Например, см. Django. Вы также можете использовать AJAX.

Если вы хотите запустить код в браузере пользователя, используйте Javascript.

Ответ 4

Есть несколько способов сделать это, но тот, который лучше всего подходит для меня, - это использовать 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 в сочетании с несколькими другими модулями и инструментами:

  • Мако (библиотека шаблонов)
  • py2exe (конвертировать в исполняемый файл Windows)
  • GccWinBinaries (используется в сочетании с py2exe)

Я написал статью о Browser в качестве рабочего интерфейса пользователя с CherryPy, в котором представлены модули и инструменты, используемые и некоторые дополнительные ссылки, которые могут помочь.

Ответ 5

В дополнение к запуску сценариев Python на сервере вы можете запускать скрипты Python на стороне клиента, используя Skulpt.