2011-06-21 5 views
2

私はCherryPyを使用しています。私は "zh-cn"という名前のフォルダを持っています。つまり、私は中国本土の中国語版簡体字中国語版を使用しています。CherryPyでは、フォルダ名のエイリアスが可能ですか?

ここに私のコードです。私がアンダースコアをどのように使用したかに注目してください。これは機能します。

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() 

誰でも解決できますか?

答えて

3

解決策1:CherryPy 3.2以上を使用している場合は、「zh_cn」と呼んでください。あなたは法的なPythonの識別子でない属性名をバインドするsetattrを使用することができます:

class ChineseFlashcards: 
    en = ChineseFlashcards_en() 

setattr(ChineseFlashcards, 'zh-cn', ChineseFlashcards_zh_cn()) 
http://docs.cherrypy.org/dev/concepts/dispatching.html#special-characters

解決策2を参照してください。

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、と認識されていない任意のURLはindexを通過します、そしてそれは別名のそれ自身の辞書になりますでしょう。

関連する問題