Erreur de construction avec les variables et url_for dans Flask
Ont trouvé une ou deux personnes sur les interwebs avec des problèmes similaires, mais je n'ai pas vu une solution de posté n'importe où. J'obtiens une erreur de génération de code/modèle ci-dessous, mais ne peuvent pas trouver où est le problème et pourquoi il se passe. Il semble que le modèle ne reconnaît pas la fonction, mais ne savent pas pourquoi cela serait produit. Toute aide serait grandement appréciée - ont été marteler ma contre le clavier pour deux nuits maintenant.
Fonction:
@app.route('/viewproj/<proj>', methods=['GET','POST'])
def viewproj(proj):
...
Modèle Extrait:
{% for project in projects %}
<li>
<a href="{{ url_for('viewproj', proj=project.project_name) }}">
{{project.project_name}}</a></li>
{% else %}
No projects
{% endfor %}
Journal des erreurs:
https://gist.github.com/1684250
EDIT: souhaitait Aussi que c'est la non-reconnaissance de la variable "proj" lors de la construction de l'URL, donc c'est juste l'ajout de la valeur d'un paramètre. Voici un exemple:
//monprojet/viewproj?projname=ce+
Dernières lignes:
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/srv/www/myproject.com/myproject/templates/layout.html", line 103, in top-level template code, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] {% block body %}{% endblock %}, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/srv/www/myproject.com/myproject/templates/main.html", line 34, in block "body", referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] <a href="{{ url_for('viewproj', proj=project.project_name) }}">, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/usr/lib/python2.7/dist-packages/flask/helpers.py", line 195, in url_for, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] return ctx.url_adapter.build(endpoint, values, force_external=external), referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/usr/lib/pymodules/python2.7/werkzeug/routing.py", line 1409, in build, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] raise BuildError(endpoint, values, method), referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] BuildError: ('viewproj', {'proj': '12th'}, None), referer: xx://myproject.com/
source d'informationauteur Rob
Vous devez vous connecter pour publier un commentaire.
url_for cherche une fonction, vous passer le nom de la fonction que vous souhaitez appeler.
Donc, vous devez utiliser :
J'ai eu le même problème. Et je l'ai résolu accoring:Flacon d'erreur: werkzeug.le routage.BuildError
Viens de résoudre le même problème, la solution est vraiment drôle.
Il suffit d'ajouter un '.' en face de votre nom de méthode dans url_for.
Comme ceci:
Et cela devrait fonctionner maintenant.
Le document pour cette solution du Flacon est http://flask.pocoo.org/docs/0.10/api/et je cite:
flacon.url_for(point de terminaison, **valeurs)
Génère une URL donnée pour le point de terminaison de la méthode indiquée.
Variable d'arguments qui sont inconnus de la cible d'extrémité sont ajoutées à l'URL générée comme arguments de la requête. Si la valeur d'une requête argument est nul, l'ensemble de la paire est ignorée. Dans le cas où les plans sont actifs, vous pouvez raccourci références pour le même modèle en préfixant la terminaison local avec un point (.).
Cette référence à l'indice de la fonction locale de l'actuel plan:
J'ai toujours réponse à cela, même si ça a été déjà répondu. La raison en est pour plus de clarté. Même après la lecture, je ne pouvais pas comprendre ce qui se passait sans regarder le fichier source pour url_for().
Un exemple propre:
Voir si le projet.project_name " est de résoudre correctement dans le modèle. Êtes-vous en passant 'projets' correctement à un modèle? Le code de la valeur pour 'proj' et voir l'url est arriver généré.
Quelque chose comme:-
Vous avez probablement plus d'un acheminé fonction avec le nom
viewproj
.En outre, le résultat affiché ne correspond pas avec le modèle de code que vous avez posté.
myproject/viewproj?projname=what+up
signifie queprojname=...
a été transmis àurl_for()
mais votre point de vue de la fonction s'attend à ceproj=...
De voir que vous spécifiez les méthodes qui sont disponibles sur ce point je pense que vous aurez à passer à la méthode que vous voulez dans url_for.
J'ai googlé pour le même problème et trouvé ceci, j'ai donc pensé que je post ce qui a fonctionné pour moi, après je me suis cogné à un peu (Au cas où quelqu'un d'autre a atterri ici). On dirait qu'il peut être juste un problème de concaténation de chaîne
J'ai eu mal "traduit par" mon code de travail:
Effet intéressant de le code ci-dessus est un coussin?", a ajouté à l'url du lien
Mais comme je le pensais plus à ce sujet, je questionnais à savoir si le url_for ajoute aucune valeur dans le modèle? La ligne suivante sera de faire la même chose pour votre balise d'ancrage: