Да, вы можете, например, определить параметр, который определяет формат:
def profile(request<b>, format='html'</b>):
#some logic calculations
<b>if format == 'html':</b>
return render(request, 'profile.html', {'data': profile})
<b>elif format == 'json':</b>
serializer = ProfileSerializer(profile)
return Response(serializer.data)
Теперь мы можем определить urls.py
с определенным параметром формата:
urlpatterns = [
url(r'^profile_(?P<format>\w+)', views.profile),
]
Так что теперь Django будет анализировать формат как регулярное выражение \w+
(вам, возможно, придется изменить это немного), и это будет передано в качестве параметра формата в вызов представления profile(..)
.
Обратите внимание, что теперь пользователь может вводить что угодно, например, localhost:8000/profile_blabla
. Таким образом, вы можете дополнительно ограничить регулярное выражение.
urlpatterns = [
url(r'^profile_(?P<format>(json|html))', views.profile),
]
Так что теперь только json
и html
являются допустимыми форматами. Таким же образом вы можете определить параметр action
(как, по-видимому, подсказывает ваш первый фрагмент кода).