Можно ли в Django использовать reverse/redirect с функцией представления (не строкой) в качестве параметра to при использовании пространств имен?

Я пытаюсь заставить reverse (через redirect) работать в контексте пространств имен и при использовании функций представления. К моему удивлению, это не удается NoReverseMatch. В принципе, я бы сказал, что можно автоматически определить, что я имею в виду. Если использовать это без app_name = ..., то все работает нормально. Является ли это ошибкой (или просто не поддерживается)? Или есть способ заставить это работать?

# urls.py

from django.urls import path

from .views import some_other_view, some_view

app_name = 'foo_app'  # here the app namespace is defined
urlpatterns = [
    path('some_other_view/', some_other_view),
    path('some_view/', some_view),
    # ...
]


# views.py

from django.shortcuts import redirect


def some_other_view(request):
    return redirect(some_view)  # note that the view is simply passed as a function here, not as a string.


def some_view(request):
    # ... actual view here

Это не поддерживается. В документации Django прямо говорится, что использование реверса с callable не рекомендуется, так как reverseне может использоваться с namespaced view.

# using the named URL
reverse("news-archive")

# passing a callable object
# (This is discouraged because you can't reverse namespaced views this way.)
from news import views

reverse(views.archive)
Вернуться на верх