Можно ли в 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)