Chr*_*agh 4 python flask python-2.7
当我进入"login.html"页面时,我收到了一个werkzeug.routing.BuildError.问题似乎是模板中的"action ="属性.原来是action={{url_for('login')}}.虽然文档显示它以这种方式完成但它似乎不起作用.当我将其更改为action="/login"或action="#"它正常工作.问题是为什么?我的印象是正确的方式是action={{url_for('login')}}?
在我将代码分解为包(单个py文件中的所有内容)之前,它正常工作.
顺便说一句,这段代码的大部分来自Miguel Grindberg的伟大着作"Flask Web Development".我遇到问题的代码是我自己的代码.我在使用WinXP并使用最新的Flask.这是我的代码如下:
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)
Run Code Online (Sandbox Code Playgroud)
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-->
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
BuildError当url_for()方法无法找到符合描述的端点时,将引发A. 在这种情况下,没有login发现在Flask app对象中注册了端点.
您似乎已login使用命名的蓝图注册了该路由main; 您需要在端点名称中使用蓝图名称:
{{ url_for('main.login') }}
Run Code Online (Sandbox Code Playgroud)
如果模板仅被main蓝图中的路径使用,则可以通过以下命令启动名称来使其相对.:
{{ url_for('.login') }}
Run Code Online (Sandbox Code Playgroud)
请参阅蓝图文档的构建URL部分.
| 归档时间: |
|
| 查看次数: |
4556 次 |
| 最近记录: |