117 votes

AssertionError : Le mappage de la fonction de visualisation écrase une fonction de point de terminaison existante : main

Quelqu'un sait-il pourquoi je ne peux pas écraser une fonction de point de terminaison existante si j'ai deux règles url comme ceci

app.add_url_rule('/',
                 view_func=Main.as_view('main'),
                 methods=["GET"])

app.add_url_rule('/<page>/',
                 view_func=Main.as_view('main'),
                 methods=["GET"])

Traceback :

Traceback (most recent call last): 
  File "demo.py", line 20, in <module> methods=["GET"]) 
  File ".../python2.6/site-packages/flask/app.py", 
    line 62, in wrapper_func return f(self, *args, **kwargs) 
  File ".../python2.6/site-packages/flask/app.py", 
    line 984, in add_url_rule 'existing endpoint function: %s' % endpoint)  
AssertionError: View function mapping is overwriting an existing endpoint 
    function: main

7voto

TheyDontHaveIT Points 342

Je voudrais simplement ajouter à cela une solution de type "modèle".

def func_name(f):
    def wrap(*args, **kwargs):
        if condition:
            pass
        else:
            whatever you want
        return f(*args, **kwargs)
    wrap.__name__ = f.__name__
    return wrap

Je voudrais juste ajouter un article vraiment intéressant "Démystifier les décorateurs" que j'ai trouvé récemment : https://sumit-ghosh.com/articles/demystifying-decorators-python/

5voto

Matija Žiberna Points 164

Ajout de @wraps(f) au-dessus de la fonction wrapper a résolu mon problème.

def list_ownership(f):
    @wraps(f)
    def decorator(*args,**kwargs):
        return f(args,kwargs)
    return decorator

1voto

yassen Points 55

Il existe un correctif pour le problème Flask #570 introduit récemment (flask 0.10) qui provoque la levée de cette exception.

Voir https://github.com/mitsuhiko/flask/issues/796

Donc si vous allez dans flask/app.py et commentez les 4 lignes 948..951, cela peut aider jusqu'à ce que le problème soit résolu dans une nouvelle version.

La différence de ce changement est ici : http://github.com/mitsuhiko/flask/commit/661ee54bc2bc1ea0763ac9c226f8e14bb0beb5b1

1voto

shrishinde Points 1239

Si vous pensez avoir des noms de points de terminaison uniques et que vous obtenez toujours cette erreur, alors vous êtes probablement confronté à la situation suivante numéro . C'était aussi le cas pour moi.

Ce problème concerne la version 0.10 de Flask. Si vous avez la même version, procédez comme suit pour vous débarrasser de ce problème :

sudo pip uninstall flask
sudo pip install flask=0.9

0voto

Vos noms de vue doivent être uniques, même s'ils pointent vers la même méthode de vue, ou vous pouvez ajouter from functools import wraps et utiliser @wraps https://docs.python.org/2/library/functools.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X