#django #django-rest-framework
#django #django-rest-framework
Вопрос:
Я предоставляю свой api через шлюз api. Итак, абсолютные URL-адреса — это проблема, я должен использовать относительные URL-адреса.
Поэтому при создании URL-адреса я не отправляю запрос. Это создает относительные URL-адреса.
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'users': reverse('user-list', request=None, format=format),
'snippets': reverse('snippet-list', request=None, format=format)
})
При использовании этого метода в интерфейсном интерфейсе browsable API URL-адреса не отображаются в виде гиперссылок. Я хочу разрешить пользователю переходить по относительным URL-адресам вместо того, чтобы копировать ссылку и добавлять ее в строку URL-адреса браузера.
Есть ли способ сделать это с помощью Django Rest Framework? Я знаю, что rest api для AWX делает это каким-то образом.
Комментарии:
1. Как насчет этого, API-интерфейсов с отношениями и гиперссылками
2. Надеюсь, это тоже полезно, HyperlinkedModelSerializer
3. Спасибо @ArakkalAbu, я обновил свой вопрос со ссылкой на ваши ссылки.
Ответ №1:
После изучения того, что делал awx, они используют Javascript или jQuery для преобразования относительных URL-адресов.
Согласно api.js
// Make links from relative URLs to resources.
$('span.str').each(function() {
var s = $(this).html();
if (s.match(/^"/. /"$/) || s.match(/^"/. /?.*"$/)) {
$(this).html('"<a href=' s '>' s.replace(/"/g, '') '</a>"');
}
});
Поэтому включил это в templates/rest_framework/api.html
:
{% block script %}
<script>
window.drf = {
csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}",
csrfToken: "{% if request %}{{ csrf_token }}{% endif %}"
};
</script>
<script src="{% static "rest_framework/js/jquery-3.4.1.min.js" %}"></script>
<script src="{% static "rest_framework/js/ajax-form.js" %}"></script>
<script src="{% static "rest_framework/js/csrf.js" %}"></script>
<script src="{% static "rest_framework/js/bootstrap.min.js" %}"></script>
<script src="{% static "rest_framework/js/prettify-min.js" %}"></script>
<script src="{% static "rest_framework/js/default.js" %}"></script>
<script src="{% static "js/api.js" %}"></script>
<script>
$(document).ready(function() {
$('form').ajaxForm();
});
</script>
{% endblock %}
Комментарии:
1. ИМХО, вам не нужно играть с js