Python的“uuCall”方法获取多个值

2024-04-24 19:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在Flask中,当我在Jinja2模板中呈现表单时(即content = PageDownField(),后者是TextAreaField的子类):

{{ form.content(class_='form-control') }}

我得到了一个错误:

^{2}$

这源于以下代码行(在widget.py)中,class_已经被属性化了。在

html = super(PageDown, self).__call__(field, id = 'flask-pagedown-' + field.name, class_ = 'flask-pagedown-input', **kwargs)

快速和肮脏的解决方案是修改烧瓶扩展的PageDown类。在

有没有更优雅的方法来解决这个问题?谢谢!在


Tags: form模板jinja2flask表单fieldcontent子类
2条回答

kwargs中可能已经有一个class_值。在

试试这个:

kwargs.update(class_='flask-pagedown-input', id='flask-pagedown-' + field.name)
html = super(PageDown, self).__call__(field, **kwargs)

如果这个CSS类对您很重要,恐怕您必须编写您自己的小部件,因为在这个文件中还有许多其他的东西是硬编码的(比如pre和post HTML字符串中的其他CSS类)。在

from wtforms.widgets import HTMLString, TextArea

pagedown_pre_html = '''
<div class="form-group">
'''

pagedown_post_html = '''
</div>
<script type="text/javascript">
f = function() {
    if (typeof flask_pagedown_converter === "undefined")
        flask_pagedown_converter = Markdown.getSanitizingConverter().makeHtml;
    var textarea = document.getElementById("flask-pagedown-%s");
    var preview = document.createElement('div');
    preview.className = 'help-block';
    textarea.parentNode.insertBefore(preview, textarea.nextSibling);
    textarea.onkeyup = function() { preview.innerHTML = flask_pagedown_converter(textarea.value); }
    textarea.onkeyup.call(textarea);
}
if (document.readyState === 'complete') 
    f();
else if (window.addEventListener)
    window.addEventListener("load", f, false);
else if (window.attachEvent)
    window.attachEvent("onload", f);
else
    f();
</script>
'''

class PageDownBootstrap(TextArea):
    def __call__(self, field, **kwargs):
        html = super(PageDownBootstrap, self).__call__(field, id = 'flask-pagedown-' + field.name, class_ = 'form-control', **kwargs)
        return HTMLString(pagedown_pre_html + html + pagedown_post_html % field.name)

注意preview块在类的第15行的替换,这可能不是您想要的。根据你的需要改变它。

另一个解决方案是使用较少形式的引导(我想这就是form-control的来源)并使flask-pagedown*类从引导继承正确的类。在

相关问题 更多 >