我有一个DataTable,其中包含以下列定义,用于向每行添加一个按钮:
"columnDefs": [ {
"targets": 11,
"data": null,
"defaultContent": "<button class='btn btn-warning btn-sm js-update-activity' data-url='https://server/platform/activities/104/update/'></button>"
} ],
它有效,除了数字104是硬编码ID。普通的Django版本如下所示:
{% for activity in activities %}
<tr>
<td>{{ activity.id }}</td>
<td>
<button class="btn btn-warning btn-sm js-update-activity"
data-url="{% url 'activity_update' activity.id %}">
</button>
</td>
</tr>
{% endfor %}
activity_update
是此URL的URL名称:
url(r'^platform/activities/(?P<pk>\d+)/update/$', views.activity_update, name='activity_update')
如果我在DRF版本中使用普通的Django版本,则会出现此错误:
Reverse for 'activity_update' with no arguments not found. 1 pattern(s) tried: ['platform/activities/(?P<pk>\\d+)/update/$']
很显然,activity.id
没有在DRF视图中定义,因为数据是通过JSON端点流入的。因此,我需要弄清楚如何将DataTable行中的ID分配给data-url
属性。
我尝试这样做...
"columnDefs": [ {
"targets": 11,
"data": null,
"render": function ( data, type, row ) {
return "<button type='button' aria-label='update' class='btn btn-warning btn-sm js-update-activity' data-url='https://server/platform/activities/'" + row.id + "'/update/'></button>";
},
...但是这导致请求仅转到https://server/platform/activities/
,而忽略了data-url
的其余部分。当我将row.id
打印到控制台时,它为我提供了DataTable中可见的每一行的正确ID。
我将如何模仿按钮的纯Django版本,以便data-url正确返回DataTable每行的硬编码URL?