2010-12-13 44 views
1

我正在考虑将网络应用从pylons移动到pyramid(正式repoze.bfg),因为遍历将比我的应用更好地匹配url调度。将金字塔遍历中的视图前缀从“@@”更改为“+”

当前,当我有一个obj与一些视图,我有视图名称前加一个'+'在url中。例如:

/path/to/obj/ (default view) 
/path/to/obj/+custom_view1 
/path/to/obj/+custom_view2 
/path/to/obj/+edit 
/path/to/obj/+delete 
/path/to/obj/sub_obj/ 

金字塔有一个功能来处理这是一个不错的方法,但它使用前缀“@@”。有没有办法将它改为“+”,这样我就可以保持我的网址一致(你知道他们对酷网址的评价),并使用此功能。

+0

这应该被标记为'金字塔',但它是新的,我没有足够的代表。 – 2010-12-13 09:56:53

+0

+通常用于创建新对象/项目的表单,所以我会建议您反对,因为它可能会造成混淆。这就是说@ @(两个有趣的眼睛,那个看法,看吧?哈哈)也许不是最漂亮的,但我不知道如何改变它。 顺便说一句,你需要在金字塔使用@@吗?在Zope中,如果与子对象发生名称冲突,则只需要@@。 – 2010-12-13 13:59:24

+0

如果你想要+,为什么不简单地把它作为视图名称的一部分? 'config.add_view(名称= '+编辑')'? – joeforker 2011-01-24 17:24:59

回答

3

是和否,您可以更改视图前缀从“@@”,但新的前缀也应该是2-symbold长度,请参阅sources遍历器。

子类ResourceTreeTraverser,然后对其进行注册,而不是默认的一个应该做的伎俩:

from pyramid.traversal import ResourceTreeTraverser as BaseResourceTreeTraverser 

class ResourceTreeTraverser(BaseResourceTreeTraverser): 
    VIEW_SELECTOR = "++" 

from pyramid.config import Configurator 
from pyramid.interfaces import ITraverser 
from zope.interface import Interface 

config = Configurator() 
config.registry.registerAdapter(ResourceTreeTraverser, (Interface,), ITraverser) 

我个人认为VIEW_SELECTOR应该被重构,以允许任何长度视前缀。

+1

谢谢。我曾看过这些代码,但无法弄清楚它是如何注册一个自定义ITraverser的。 我已经提交了拉取请求以允许视图选择器的任何长度。 https://github.com/Pylons/pyramid/pull/99 – 2011-01-13 09:15:32