使用python金字塔框架在所有页面中实现相同形式的好方法



让我问一个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)

您可以在此处找到更多信息。

最新更新