2010-12-13 10 views
1

Je cherche à déplacer une application Web de pylons à pyramid (formellement repoze.bfg) parce que traversal adaptera mon application bien mieux que l'envoi d'url.Modifier le préfixe de vue dans la traversée pyramidale de "@@" à "+"

Actuellement, lorsque j'ai un obj avec un certain nombre de vues, j'ai les noms de vue préfixés avec un '+' dans l'URL. .: par exemple

/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/ 

pyramide a une fonction pour gérer est une belle façon, mais il utilise le préfixe « @@ ». Y a-t-il un moyen de changer cela en "+" pour que je puisse garder mes URLs identiques (vous savez ce qu'ils disent sur les cool urls) et utiliser cette fonctionnalité.

+0

Ceci devrait être étiqueté 'pyramide', mais c'est nouveau, et je n'ai pas assez de rep. + –

+0

+ est généralement utilisé pour les formulaires qui créent de nouveaux objets/éléments, donc je recommande recomend contre cela car il peut être source de confusion. Cela dit @@ (deux yeux écarquillés, ce point de vue, voir? Haha) pourrait ne pas être le plus joli non plus, mais je ne sais pas comment le changer. Btw, avez-vous besoin d'utiliser @@ dans Pyramid? Dans Zope, vous avez seulement besoin de @@ s'il y a un conflit de noms avec un sous-objet. –

+0

Si vous voulez le +, pourquoi ne pas simplement faire partie du nom de la vue? 'config.add_view (name = '+ edit')'? – joeforker

Répondre

3

Oui et non, vous pouvez modifier le préfixe de vue de "@@" mais le nouveau préfixe doit également avoir une longueur de 2 symboles, voir sources pour traverser.

Dérivation de ResourceTreeTraverser puis l'enregistrer au lieu de celui par défaut devrait faire l'affaire:

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) 

Personnellement, je pense que VIEW_SELECTOR devrait être refactorisé pour permettre tous les préfixes de vue de la longueur.

+1

Merci. J'avais vu ce code, mais je n'arrivais pas à comprendre comment il enregistrait un ITraverser personnalisé. J'ai soumis une requête de tirage pour autoriser un sélecteur de vue de n'importe quelle longueur. https://github.com/Pylons/pyramid/pull/99 –