你能在Joomla中显示python web代码吗?

时间:2014-03-19 16:32:20

标签: php python joomla cherrypy joomla3.0

我正在构建一个Joomla 3网站,但我需要自定义相当多的页面。我知道我可以将PHP与Joomla一起使用,但它是否也可以使用Python?具体来说,我希望使用CherryPy编写一些自定义代码片段,但我希望它们显示在原生Joomla页面(而不仅仅是iFrames)中。这可能吗?

5 个答案:

答案 0 :(得分:1)

从不同来源(Joomla和CherryPy)构建页面的最有效方法可能是使用Edge Side Includes

基本上,您运行的Joomla实例提供包含ESI标记的文档。您运行CherryPy实例,该实例提供您要放在esi标记位置的部分。并且你运行一个支持ESI的反向代理,如varnish将它们拼接在一起。

这可能看起来像很多活动部件,但它会像......那些真正响应的东西一样响应。调整缓存部分,你可以减轻你的Joomla和数据库的工作量。

来自其他答案的exec方式适用于打印某些内容的小python脚本,但适用于CherryPy。

答案 1 :(得分:1)

PHP执行Python“脚本”

这适用于脚本,它可以执行操作并返回输出,而不适用于CherryPy。

 <?php
    // execute your Python script from PHP
    $command = escapeshellcmd('myPythonScript.py');
    $output = shell_exec($command);

    echo $output;

    // take response content to embed it into the page
 ?>

PHP访问Python / CherryPy服务网站

import cherrypy
class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

这会启动http://localhost:8080,您应该看到Hello world!

现在,您可以通过访问它localhost:port来访问CherryPy的输出。 性能不佳,但有效。

<?php
    $output = file_get_contents('http://localhost:8080/');
    echo $output;
?>

Joomla + Ajax访问Pyhton / CherryPy服务网站

另一种解决方案是,不使用PHP来获取内容,而是从客户端进行提取。基本上,你会使用一个Ajax-Request到CherryPy服务的网站,获取它的内容并将其嵌入到Joomla服务页面的dom中。

 // add jQuery Ajax reqeust from your Joomla page to CherryPy
 $.ajax({
    url: "https://localhost:8080/", // <-- access the 2nd served website
    type: 'GET',
    success: function(res) {
      //console.log(res);
      alert(res);
      $("#someElement").html(res);
    }
 });

答案 2 :(得分:0)

您可以通过php文件执行它。试试这个:

exec("python/path/your-script.py");  

答案 3 :(得分:0)

  

这是可能的,但效率不高。

     

您可以使用exec()函数从PHP执行Python脚本:   PHP代码:

exec("python /path/to/python-script.py");
     

还有各种类似的PHP函数可供使用   完成相同的事情与输入和方式的微小差异   处理输出(passthru,system,proc_open,反引号)。

     

Python脚本将使用其命令行界面执行 -   不使用CGI(或类似)界面,就像你在网上一样   服务器直接执行Python脚本。这意味着   Python脚本无法访问有关HTTP的信息   请求 - GET / POST值,客户端的IP地址,页面URL等。   您可以使用命令行将此信息从PHP传递到Python   参数,管道,临时文件或其他形式的   进程间通信,但你需要通过每一段   明确要求的信息。

     

这是效率低下的原因是因为每次调用exec都会   为Python脚本生成一个全新的进程。那是公平的   在每个HTTP请求上执行昂贵的操作(这就是服务器的原因)   像Apache和Fast-CGI之类的接口重用子进程和   线程而不是创建新的线程)。此外,如果你有更多   比起对exec的一次调用,每一个都会产生一个新的   过程

摘自here

更多信息:Unable to put Python code to Joomla

答案 4 :(得分:0)

在考虑Python之前

  • 您想要自定义什么? (可能已经存在一些聪明的Javascript或Joomla扩展)

  • 鉴于您使用的是Joomla,Joomla方式不是解决您问题的更好方法吗? (更改模板,特别是模块和组件的视图模板)

    i.o.w。:你了解Joomla 足够知道你需要别的东西吗?见下文:

如果Python还有出路:

  • 您的托管是否支持Python?

  • 您是否应该重新考虑您选择的CMS?

我喜欢你选择的CherryPy。