【问题标题】:add data attributes to <options> rendered by django form library将数据属性添加到 django 表单库呈现的 <options>
【发布时间】:2017-03-29 10:53:39
【问题描述】:

我有django choice field

django 渲染的 HTML 是这样的:

<select id="id_action" name="action">
 <option value="" selected="selected">---</option>
 <option value="query-action-take">Take</option>
 <option value="query-action-forward">Forward</option>
</select>

在执行用户选择的操作之前,应进行确认。但并非所有操作都需要确认。在这个例子中“删除”需要,但“取”不需要确认。

我想在选项

中添加html data attributes

结果应该是这样的:

<select id="id_action" name="action">
 <option value="" selected="selected">---</option>
 <option value="query-action-take"   data-need-confirm="False">Take</option>
 <option value="query-action-delete" data-need-confirm="True">Delete</option>
</select>

到目前为止,我还没有发现将“需要确认”的数据注入个人选择的方法。

...还是我在这里走错了路?

这个问题只是关于“如何将数据放入 html”。数据评估(确认弹出窗口)不属于此问题。

【问题讨论】:

  • 您是否尝试过使用 JS 或 jquery 将 data 添加到您的 html 中?
  • 您根据选择的选项节点启动操作,对吗?那么在javascript中处理确认不是更容易吗?我认为选项标签不能处理数据属性,因为它们非常特殊。
  • @mtizziani 是的,我会在 javascript 中进行确认。这个问题是关于如何将数据放入html中。评估不是这个问题的一部分。
  • @guettli 也许您正在寻找这样的解决方案:jsfiddle.net/vyhb2c2z
  • 有一个适用于 Django 2.+ 的通用解决方案,并允许在选项中添加标题和其他内容,请参阅stackoverflow.com/a/56097149/1788851

标签: javascript html django


【解决方案1】:

您需要为此创建一个自定义小部件。如果您查看 Select 小部件 (django.forms.Select) 的 Django 文档,您会发现 render_option() 方法。所以最好继承默认的 Select 类并覆盖这个方法。

【讨论】:

    【解决方案2】:

    模板渲染器肯定包含添加数据的功能,问题是你从哪里得到它。

    <select id="id_action" name="action">
     <option value="" selected="selected">---</option>
     {% for action in actions %}
      <option value="{{action.value}}"   data-need-confirm="{{action.isConfirm}}">{{action.name}}</option>
     {% endfor %}
    </select>
    

    这是您想要添加到模型中的东西吗?可能不是。但您也可以将其添加为硬编码字典。

    【讨论】:

    • 我不太喜欢模板。我以某种方式更喜欢编写自定义小部件。请不要问我为什么。这是一种感觉,不是理性的决定。
    • 如果没有模板或 Javascript,您将不得不重写dentemm 所述的小部件类的行为。
    猜你喜欢
    • 2023-03-11
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多