首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取werkzeug.routing.BuildError

获取werkzeug.routing.BuildError
EN

Stack Overflow用户
提问于 2014-07-12 23:14:21
回答 1查看 5.2K关注 0票数 4

当我转到我的“werkzeug.routing.BuildError”页面时,我得到了一个login.html。问题似乎是模板中的"action=“属性。最初是action={{url_for('login')}}。尽管文档显示它是这样做的似乎不起作用。当我将它更改为action="/login"action="#"时,它正确地工作。问题是为什么?我的印象是正确的方式是action={{url_for('login')}}

在我将我的代码分解成包(在单个py文件中的所有内容)之前,它正常工作。

顺便说一句,大部分代码都是米格尔·格林伯格( Miguel Grindberg)的伟大著作“”中的。我遇到问题的代码是我自己的,我在书中添加了这些代码。我正在WinXP上使用最新的酒瓶。下面是我的代码:

flasky\app\main\views.py

代码语言:javascript
复制
from flask import render_template, session, redirect, url_for, current_app, flash
from .. import db
from ..models import User
from ..email import send_email, post_mail
from . import main
from .forms import NameForm, RegForm


@main.route('/login', methods=['GET', 'POST'])
def login():
    form = RegForm()
    if form.validate_on_submit():
        session['name'] = form.username.data
        session['logged_in'] = True
        return redirect(url_for('success'))
    return render_template('login.html', form=form)

flasky\app\templates\login.html

代码语言:javascript
复制
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}Sign Up{% endblock %}


{% block content %}
    {{ super() }}

    <div class="well">
        <h1 align="center">Sign-In</h1>
    </div>

    <div class="container"> 
        <form class="form form-horizontal" action="{{url_for('login')}}" method="post">
            {{form.hidden_tag()}}

            {{wtf.form_field(form.username)}}

            {{wtf.form_field(form.email)}}

            {{wtf.form_field(form.password)}}

            {{wtf.form_field(form.bool)}}

            {{wtf.form_field(form.submit)}}
        </form>
    </div>  
{% endblock %}

<!-- action= {{url_for('login')}} doesn't work. . ."#" and "\login" work-->

flasky\app\main\forms.py

代码语言:javascript
复制
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField, PasswordField, BooleanField, SubmitField
from wtforms.validators import Required, Email

class RegForm(Form):
    username = StringField('Username', validators=[Required()])
    email = StringField('Email Address', validators=[Email()])
    password = PasswordField('Password', validators=[Required()])
    bool = BooleanField("I Agree To Your Terms of Services", validators=[Required()])
    submit = SubmitField('Submit')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-12 23:18:43

BuildError方法无法找到适合描述的端点时,将引发url_for()。在这种情况下,没有发现login端点被注册到app对象中。

您似乎已经用名为login的蓝图注册了main路由;您需要在端点名中使用蓝图名称:

代码语言:javascript
复制
{{ url_for('main.login') }}

如果模板仅由main蓝图中的路由使用,您也可以使用.作为名称的开头。

代码语言:javascript
复制
{{ url_for('.login') }}

请参阅蓝图文档的部分

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24718141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档