使用python金字塔框架在所有页面中使用相同表单的好方法

时间:2014-03-05 02:40:05

标签: python forms frameworks pyramid

让我问一下python金字塔框架。 我想执行表单的逻辑(检查,注册,重定向),以便在视图的一个位置显示所有页面。 我使用pyramid_layout面板,但面板无法返回HTTPFound()。 它似乎能够在钩子或javascript中实现,但是没有好的方法吗?

  • 金字塔== 1.4.5
  • WTForms == 1.0.5

谢谢,评论。

这是反馈形式的常见页脚。

应用/ tempaltes /布局/ 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

应用/ views.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中的函数。 这是错的吗?

1 个答案:

答案 0 :(得分:0)

您可以在@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)

您可以找到更多信息here