当我转到我的“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
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
{% 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
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')发布于 2014-07-12 23:18:43
当BuildError方法无法找到适合描述的端点时,将引发url_for()。在这种情况下,没有发现login端点被注册到app对象中。
您似乎已经用名为login的蓝图注册了main路由;您需要在端点名中使用蓝图名称:
{{ url_for('main.login') }}如果模板仅由main蓝图中的路由使用,您也可以使用.作为名称的开头。
{{ url_for('.login') }}请参阅蓝图文档的部分。
https://stackoverflow.com/questions/24718141
复制相似问题