在CherryPy中,是否可以为文件夹名称添加别名?

时间:2011-06-21 21:27:55

标签: python localization cherrypy cjk

我正在使用CherryPy。我有一个名为“zh-cn”的文件夹 - 这意味着我使用的是中国大陆的中文版 - 简体中文。

这是我的代码。注意我是如何使用下划线的?这很有效。

class ChineseFlashcards:
    zh_cn = ChineseFlashcards_zh_cn()
    en = ChineseFlashcards_en()

我的问题是我宁愿使用连字符,因为我觉得它“更正确”。但是,您可能不会在Python中使用类似的连字符。这不被允许。这会引发错误:

class ChineseFlashcards:
    zh-cn = ChineseFlashcards_zh_cn()
    en = ChineseFlashcards_en()

我正在寻找的是某种将标识符别名的CherryPy属性。这样的事情(但这不合法)

class ChineseFlashcards:
    @cherrypy.expose(alias=['zh-cn'])
    zh_cn = ChineseFlashcards_zh_cn()
    en = ChineseFlashcards_en()

任何人都有解决方案吗?

2 个答案:

答案 0 :(得分:3)

解决方案1:如果您使用的是CherryPy 3.2或更高版本,请将其称为“zh_cn”。见http://docs.cherrypy.org/dev/concepts/dispatching.html#special-characters

解决方案2:您可以使用setattr绑定非合法Python标识符的属性名称:

class ChineseFlashcards:
    en = ChineseFlashcards_en()

setattr(ChineseFlashcards, 'zh-cn', ChineseFlashcards_zh_cn())

答案 1 :(得分:0)

最简单的解决方案可能是在您自己的index方法中处理它。像这样的东西:

class ChineseFlashcards:
    zh_cn = ChineseFlashcards_zh_cn()
    en = ChineseFlashcards_en()

    aliases = {'zh-cn': zh_cn}

    @cherrypy.expose
    def index(self, locale, *args, **kwargs):
        if arg in self.aliases:
            return aliases[locale](*args, **kwargs)

en仍然可以正常工作,zh_cn也是如此,任何无法识别的网址都会通过index,它会查看自己的别名字典。