gpt4 book ai didi

flask - ListField 在编辑/创建帖子中显示
    而不是 <input>

转载 作者:行者123 更新时间:2023-12-03 16:04:21 31 4
gpt4 key购买 nike

我正在为一个项目使用 Flask、mongoengine,我正在尝试从 http://docs.mongodb.org/manual/tutorial/write-a-tumblelog-application-with-flask-mongoengine/ 获取基本的东西。

从上面的链接实现所有内容后,我在帖子中为“标签”添加了一个新字段,当我尝试创建帖子时,我的标签没有显示输入框。

感谢任何帮助。

下面是我的代码和截图

class Post(db.DynamicDocument):
created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
title = db.StringField(max_length=255, required=True)
slug = db.StringField(max_length=255, required=True)
comments = db.ListField(db.EmbeddedDocumentField('Comment'))
tags = db.ListField(db.StringField(max_length=30)) # New field I added

enter image description here

enter image description here

模板表单

{% macro render(form) -%}
<fieldset>
{% for field in form %}
{% if field.type in ['CSRFTokenField', 'HiddenField'] %}
{{ field() }}
{% else %}
<div class="clearfix {% if field.errors %}error{% endif %}">
{{ field.label }}
<div class="input">
{% if field.name == "body" %}
{{ field(rows=10, cols=40) }}
{% else %}
{{ field() }}
{% endif %}
{% if field.errors or field.help_text %}
<span class="help-inline">
{% if field.errors %}
{{ field.errors|join(' ') }}
{% else %}
{{ field.help_text }}
{% endif %}
</span>
{% endif %}
</div>
</div>
{% endif %}
{% endfor %}
</fieldset>
{% endmacro %}

渲染表单代码

{% extends "admin/base.html" %}
{% import "_forms.html" as forms %}

{% block content %}
<h2>
{% if create %}
Add new Post
{% else %}
Edit Post
{% endif %}
</h2>

<form action="?{{ request.query_string }}" method="post">
{{ forms.render(form) }}
<div class="actions">
<input type="submit" class="btn primary" value="save">
<a href="{{ url_for("admin.index") }}" class="btn secondary">Cancel</a>
</div>
</form>
{% endblock %}

最佳答案

据我所知,您的问题是您告诉 WTF 呈现标签字段,但 WTForms 不知道如何处理该信息。

从查看 Flask-MongoEngine文档,似乎 ListField 只是一个 FieldList 作为 WTForms refers to it .

目前你实际上并没有在 WTForms 中独立定义表单,你只是在使用 Flask-MongoEngine 中包含的魔法,所以我的第一次尝试是向你的宏添加更多逻辑,添加一个 { % elif field.type == 'ListField' %} 并尝试发现其中包含的内容以迭代生成您的表单。通过快速查看源代码,以下内容可能会起作用。

{% elif field.type == 'ListField %}
{# render_the_group_label #}
{% for subfield in field.entries %}
{% if subfield.type == 'StringField' %}
{# render_the_subfield #}
{% endif %}
{% endfor %}
...

该代码需要改进,但希望它能为您指明正确的方向。否则,我实际上会在 WTForms 中单独定义表单,以便您在代码端获得更多控制。幸运的是他们提供了a csv tag example如果你需要走那条路,这应该对你有帮助。 I wrote a guide它使用 @property 装饰器采用不同的路线来实现类似的效果,这可能至少会指向终点线。

关于flask - ListField 在编辑/创建帖子中显示 <ul> 而不是 &lt;input&gt;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917003/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com