-3

我想用 Django 代替 Django 的默认模板语言来尝试 Mako。但是当我尝试按照手册中的Template说明导入 Mako 的课程时遇到了问题:

from mako.template import Template 
mytemplate = Template("hello world!") 
print mytemplate.render()

我在 Windows cmd 中执行此操作并收到这样的错误:

C:\Documents and Settings\User>cd C:\py\project\vendor\template\Mako_73  // cd to where I unpacked Mako
C:\py\project\vendor\template\Mako_73>python   // run Python interpreter

>>> from mako.template import Template  // trying to import and getting an error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".\mako\template.py", line 622
    exec code in module.__dict__, module.__dict__
            ^
SyntaxError: invalid syntax

该部分的代码:

def _compile_text(template, text, filename):
    identifier = template.module_id
    source, lexer = _compile(template, text, filename,
                        generate_magic_comment=template.disable_unicode)

    cid = identifier
    if not util.py3k and isinstance(cid, unicode):
        cid = cid.encode()
    module = types.ModuleType(cid)
    code = compile(source, cid, 'exec')    
    exec code in module.__dict__, module.__dict__
    return (source, module)

会是什么?我在 Google 中找不到有关此错误的任何信息。

我正在使用 Python 3.3。

我已将 Mako-0.7.3 下载为 tar.gz 文件,然后将其解压缩为 C:\py\poject\vendor\template\Mako_73. 我在 PYTHONPATH 或 paths.pth 中没有这个目录。C:\py\poject是我的 Django 项目所在的目录,我\vendor\template决定放入 Mako 并从那里导入它。

UPD

我找到了解决方案。我已经安装了 Pyramid Framework 并从那里获取了 Mako,因为 Mako 是其中的默认模板系统。Pyramid 的版本运行良好。

4

1 回答 1

5

您的基本问题是您使用的是 Python 3,这对于 Django 等大型项目来说相对较新。

其次,您需要了解如何正确安装软件包。我不知道你从哪里得到 Mako,但你不会找到任何地方说“只需解压缩 tarball”——也许你是根据你对 PHP 的了解来假设的,但这是不正确的。

在 Mako 站点上,建议的安装方法是 pip。

如果您手动下载,您需要阅读有关安装 Python 包的说明,例如:http ://wiki.python.org/moin/CheeseShopTutorial

Mako 不适合您的原因是安装过程(您尚未运行)转换了所有提供的 Python 2 代码,以便它可以在 Python 3 上运行。并不是有人不费心检查代码对于基本的语法错误!

但是,如果您尝试使用 Django,那么 Python 3 绝对是错误的选择 - 安装说明清楚地表明您需要使用 Python 2.5 到 2.7: https ://docs.djangoproject.com/en/1.4/intro/install /

由于您是 Python 新手,因此您应该在跑步之前尝试步行,并使用久经考验的路径 - 这是 Django 的 Python 2.7。忽略安装说明和要求只会减慢您的速度并使生活变得艰难。

于 2013-02-09T22:47:08.183 回答