Вызов функции Python в HTML-файле - PullRequest
12 голосов
/ 11 апреля 2011

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

Спасибо

Ответы [ 5 ]

21 голосов
/ 11 апреля 2011

Вам нужно будет использовать веб-фреймворк для маршрутизации запросов к Python, поскольку вы не можете сделать это только с помощью HTML. Колба - это одна простая структура:

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

6 голосов
/ 11 апреля 2011

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

2 голосов
/ 08 февраля 2012

Есть несколько способов сделать это, но тот, который лучше всего сработал для меня, это использовать CherryPy.CherryPy - это минималистичный веб-фреймворк Python, позволяющий запускать небольшой сервер на любом компьютере.У вас очень похожий вопрос по stackoverflow - Использование браузера для настольного интерфейса пользователя .

Код ниже будет делать то, что вы хотите.Пример 2 из учебника по CherryPy.

import cherrypy

class HelloWorld:

    def index(self):
        # Let's link to another method here.
        return 'We have an <a href="showMessage">important message</a> for you!'
    index.exposed = True

    def showMessage(self):
        # Here's 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 в сочетании с несколькими другими модулями и инструментами:

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

Я написал статью о Browser as Desktop UI с CherryPy , в котором представлены модулии используемые инструменты, а также некоторые дополнительные ссылки, которые могут помочь.

2 голосов
/ 11 апреля 2011

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

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

1 голос
/ 15 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...