Необязательная часть 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) => {
...
});
});
};
});
});
Как уже упоминалось ранее, все работает просто отлично!
Можно ли это осуществить или есть лучший способ сделать это?
Спасибо.