python - 将 HTMLFill 与 Pyramid 的 @view_config 结合使用

标签 python forms pyramid mako htmlfill

我正在尝试使用 HTMLFill 用默认值填充表单。我有一个使用 @view_config 装饰器并在 mako 中生成表单的函数。

@view_config(renderer="templates/derived/new/model.mak", route_name='new_model_route')
def new_model(self, fparams=None):
    defaults = {'node_name': 'blah'}
    process_route = route_url("process_model_route", self.request, ppath=ppath)
    return dict({'ppath':ppath, 'process_route':process_route})

模板:

<%def name="direct_load_model_form(method, target_path)">
${h.tags.form(method, multipart=True, method='post', hidden_fields=[('ppath', ppath)])}
<b>Node Name: </b>${h.tags.text('node_name')}<BR>
<b>Parameters: </b>${h.tags.file('params_file')}<BR>
${h.tags.submit('submit', 'Submit')}
${h.tags.end_form()}
</%def>
${self.direct_load_model_form(process_route, ppath)}

基本用法示例如下:

>>> from formencode import htmlfill
>>> form = '<input type="text" name="fname">'
>>> defaults = {'fname': 'Joe'}
>>> htmlfill.render(form, defaults)
'<input type="text" name="fname" value="Joe">'

在我的例子中,我没有使用如何填充 htmlfill.render 的第一个参数。

最佳答案

您可以将表单放置在单独的 mako 文件中,例如 form.mako。从那里您可以将其渲染为字符串,通过 htmlfill 传递它,并将结果传递给您的实际模板。

<!-- new_model_form.mako -->
<form ...>
</form>
from pyramid.renderers import render

@view_config(..., renderer="new_model.mako")
def new_model(self):
    raw_form_html = render('new_model_form.mako', request, {...})
    form_html = htmlfill(raw_form_html, ...)
    return {
        'form_html': form_html,
    }
<!-- new_model.mako -->
<% inherit file='base.mako' %>

${form_html | n}

您需要通过 n 过滤器过滤 form_html,以避免渲染的 html 被转义。

当然,您始终可以将所有内容放在同一个模板中并渲染它,从您的 View 返回一个 Response 对象并绕过渲染器。

from pyramid.renderers import render

@view_config(...) # no renderer needed
def new_model(self):
    raw_html = render('new_model.mako', request, {...})
    html = htmlfill(raw_html, ...)
    resp = request.response
    resp.body = html
    return resp

关于python - 将 HTMLFill 与 Pyramid 的 @view_config 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451552/

相关文章:

javascript - 自动显示用户名是否可用 JQuery

forms - 使用 symfony2 和 phpunit 修改表单操作

python - 加入表本身以查找具有相同关系的用户

python - 如何按照我的查询(一个句子分解成一个词元组)的相同顺序对我的 SQL 结果进行排序?

python - 如何重新触发之前的 'while' 循环

python - 获取用户角色并将其添加到 jwt 负载中

javascript - 在 AngularJS 中重置表单

python - 将 Pyramid 和 Mako 与 Google App Engine 结合使用时出现导入错误 : Cannot re-init internal module __main__,

python - 你们可以从 Pyramid 提供静态 HTML 页面吗?

python - 固定长度整数分区的唯一排列,其中每个元素都有一个最大值