让我问一个python金字塔框架。我想执行表单的逻辑(检查、注册、重定向),以便在视图的一个位置显示所有页面。我使用 pyramid_layout 面板,但面板无法返回 HTTPFound()。它似乎可以在钩子或javascript中实现,但是没有好方法吗?
- 金字塔==1.4.5
- WTForms==1.0.5
谢谢,评论。
这是带有反馈表单的常见页脚。
app/tempaltes/layouts/layout.mako
${panel('navbar')}
${next.body()}
<!-- common footers -->
<div class="container">
${panel('common_footers')}
<div class="col-lg-5">
<p>Please drop us a line on Project.</p>
<form id="feedback" action="${action}" method="post">
<div class="form-group${' has-error' if form.feedback.errors else ''}">
${form.feedback(class_="form-control", rows="4", maxlength="140")}
</div>
% if form.feedback.errors:
<div class="form-group has-error">
<p class="text-danger">
% for error in form.feedback.errors:
${error}
% endfor
</p>
</div>
% endif
<div class="form-group">
<button type="submit" class="btn btn-primary">Send us a feedback</button>
</div>
</form>
</div>
</div><!--/.container -->
这是 views.py
应用/视图.py
@view_config(route_name = 'home', renderer = '/home.mako')
def home(request):
form = Feedback(request.POST)
url = request.current_route_url()
if request.method == 'POST' and form.validate():
return HTTPFound(location = url)
return dict(form = form, action = url)
def foo(request):
... same code
def bar(request):
... same code
不必多次将相同的代码写入 view.py 函数。有错吗?
您可以在@view_config(route_name='home', renderer='/home.mako')
顶部堆叠多个装饰器
像这样:
@view_config(route_name='foo', renderer='/home.mako')
@view_config(route_name='bar', renderer='/home.mako')
@view_config(route_name='home', renderer='/home.mako')
def home(request):
form = Feedback(request.POST)
url = request.current_route_url()
if request.method == 'POST' and form.validate():
return HTTPFound(location = url)
return dict(form = form, action = url)
您可以在此处找到更多信息。