【问题标题】:How can you manually render a form field with its initial value set?如何手动渲染设置了初始值的表单域?
【发布时间】:2011-04-25 04:48:33
【问题描述】:

我正在尝试手动呈现表单的字段,以便我的设计师同事可以在 HTML 中操作输入元素,而不是在 Python 源代码中苦苦挣扎。

即。而不是像这样声明表单字段...

            {{ form.first_name }}   

..我确实有...

            <label for="id_first_name">Your name:</label>
            <input type="text" value="{{  form.first_name.somehow_get_initial_value_here }}" name="first_name" id="id_first_name" class="blabla" maxlength="30" >
            {% if form.first_name.errors %}<span>*** {{ form.first_name.errors|join:", " }}</span>{% endif %}

问题是在第二种方法中似乎没有办法获取字段的初始值。 {{ form.first_name }} 语句确实使用正确的初始值呈现输入元素,但不知何故,当您使用 {{ form.first_name.initial_value }} 字段时想要手动渲染表单。

【问题讨论】:

  • 输入标签有一个value 属性。 ` ` 例如。这是你需要的吗?
  • 谢谢,但初始值来自服务器端,是动态的。将代码示例编辑得更清楚。
  • 如果您在创建表单类实例时在initial dict 中提供了first_name,则在第一次显示表单时会自动在{{ form.first_name }} 中提供该值。
  • 如果唯一的问题是放置样式,您可以在代码的表单字段中添加 css 类。

标签: python django django-forms form-fields


【解决方案1】:

关于这个问题有一张有趣的长期票。有示例代码可以在 cmets 中实现模板过滤器,可以满足您的需要:

http://code.djangoproject.com/ticket/10427

【讨论】:

  • 所有来自谷歌的人:&lt;input value="{{ form.field_name.value }}"&gt;
【解决方案2】:
<input value="{{form.name.data|default_if_none:'my_defaut_value'}}" ... />

您将不得不使用default_if_none,因为绑定字段的隐式值不会存储在data. More details here

【讨论】:

  • 也许我错过了什么,但“form.field.data”每次都没有出现。
  • 是的,我现在看到它也引发了我这边的一些问题。它在表单进入错误模式时起作用 :P 。但是,在我回答的结尾和第一个人的回答中,更多的细节(如果你有时间阅读完整的票)可以在这张票中找到;)
猜你喜欢
  • 2020-12-14
  • 2017-06-02
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多