Необязательная часть url django url

Я пытаюсь настроить url в проекте Django так, чтобы API, написанный на JS call, мог обращаться к нему из двух разных представлений. Например: localhost:8000/edit/3 вызовет из представления /, которое соответствует localhost:8000/, функцию, которая модифицирует ресурс с id из 3. Я хотел бы использовать тот же API из другого представления следующим образом: localhost:8000/profile/23/edit/3. Это в основном означает, что я хотел бы, чтобы пользователь мог модифицировать тот же ресурс, используя точно такой же API. Могу ли я установить путь в файле urls.py, используя re_path вместо path в urlpattenrs для достижения этой цели? urlpatterns будет выглядеть примерно так:

from django.urls import path, re_path

from . import views

urlpatterns = [
    ...
    # API routes
    ...
    re_path("{profile/<int: user_id>/}edit/<int:post_id>", views.edit),
    ...
]

Обратите внимание, что фигурные скобки - {} - не являются частью фактического пути, а содержат часть, которую я хотел бы сделать необязательной. Также, в настоящее время path используется вместо re_path. Я просто предполагаю, что моя цель может быть достигнута с помощью regex. Вот часть функции edit в views.py:

def edit(request, post_id):
    if request.method == "PUT":
        try:
            post = Post.objects.get(pk=post_id)
        except Post.DoesNotExist:
            return JsonResponse({"error": f"Could not find post with id {post_id}"}, status=400)
        ...
    return JsonResponse({"message": "Method not allowed"}, status=403)

Многоточие - ... - здесь заменяют блок логики, который правильно модифицирует ресурс.

Наконец, для полноты картины вот часть API, которая работает с фронт-эндом:

/**
 * Script to edit a post asynchronously
 */

document.addEventListener('DOMContentLoaded', () => {
              ...

             fetch(`edit/${postId}`, {
                    method: 'PUT',
                    body: JSON.stringify({ content: updatedContent })
                })
                    .then((response) => response.json())
                    .then((data) => {

                        ...

                    });

            });
        };

    });
});

Как уже упоминалось ранее, все работает просто отлично!

Можно ли это осуществить или есть лучший способ сделать это?

Спасибо.

Вернуться на верх