В CherryPy возможно ли псевдоним имени папки? - PullRequest
2 голосов
/ 22 июня 2011

Я использую 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 ]

3 голосов
/ 22 июня 2011

Решение 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())
0 голосов
/ 22 июня 2011

Самым простым решением, вероятно, является обработка этого в вашем собственном методе 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, и он будет выглядеть по-своему.

...