Urlize ссылка DRF

#python #django #python-3.x #datatables #django-rest-framework

#python #django #python-3.x #таблицы данных #django-rest-framework

Вопрос:

У меня есть сериализатор DRF:

 class ActivitySerializer(serializers.ModelSerializer):
    link = serializers.CharField(source='get_analytic_link', allow_null=True)
    class Meta:
        model = Activity
        fields = ['link',]
  

В доступном для просмотра API ссылки доступны для просмотра. Однако, когда они передаются в DataTable через конечную точку JSON, они (предсказуемо) не доступны для просмотра. В обычном Django я бы сделал что-то вроде этого:

 <td>{{ activity.get_analytic_link|urlize }}</td>
  

Как я могу воспроизвести это поведение в DRF, чтобы ссылки были интерактивными?

Комментарии:

1. У меня нет опыта работы с таблицами данных, но разве вы не должны просто обернуть URL в тег <a> ?

2. на каком этапе процесса это будет включено? если я добавлю это в полезную нагрузку JSON, я бы подумал, что это просто отобразится в виде строки в браузере, тегов <a> и всего остального.

3. Я думаю, вам не следует ничего менять в API, просто продолжайте отправлять URL и обрабатывайте это на стороне клиента

Ответ №1:

Похоже, это задание на интерфейсе, и вам следует использовать функцию DataTable columns.render.

Пример:

 var responseObj = [
    { "information": "A1", "weblink": "http://www.microsoft.com" },
    { "information": "A2", "weblink": "http://www.yahoo.com" },
    { "information": "A3", "weblink": "http://www.google.com" },
    { "information": "A4", "weblink": "http://www.duckduckgo.com" }
];

$('#example').dataTable({
   "data": responseObj,
   "columns": [
      { "data": "information" }, 
      { 
         "data": "weblink",
         "render": function(data, type, row, meta){
            if(type === 'display'){
                data = '<a href="'   data   '">'   data   '</a>';
            }

            return data;
         }
      } 
   ]
});