将金字塔遍历中的视图前缀从“@@”更改为“+”
我正在考虑把一个网页应用从 pylons 转移到 pyramid(以前叫 repoze.bfg),因为使用遍历的方式对我的应用来说更合适,而不是通过网址分发。
目前,我有一个对象,它有很多视图,我在网址中用 '+' 来作为视图名称的前缀。例如:
/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/
Pyramid 有一个很不错的功能可以处理这个问题,但它使用的是前缀“@@”。有没有办法把这个改成“+”,这样我就可以保持我的网址不变(你知道大家都说好网址的重要性),同时还能使用这个功能。
1 个回答
3
可以也不可以,你可以把视图前缀从“@@”改掉,但新的前缀也必须是两个字符的长度。具体可以查看这个源代码,里面有关于遍历器的内容。
你可以通过创建一个新的类,继承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进行一些改进,这样就可以支持任意长度的视图前缀了。