Django reverse() ищет url pattern в основном приложении
Я использую reverse в приложении dialogs, пытаясь перейти после успешной обработки формы на следую страницу:
class CommonlyFilesUpload(FormView):
form_class = CommonlyFilesForm
template_name = 'dialogs/add_commonly_files.html'
success_url = reverse('commonly_files')
def get(self, request):
form = CommonlyFilesForm()
return render(request, self.template_name, context={'form': form})
def post(self, request):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('files_field')
if form.is_valid():
print(form.cleaned_data['bot'])
for f in files:
CommonlyFile.objects.create(file=f, bot=form.cleaned_data['bot'])
return self.form_valid(form)
else:
return self.form_invalid(form)
Но ничего не выходит, reverse почему-то ищет этот url pattern name в urls.py основного app:
django.core.exceptions.ImproperlyConfigured: The included URLconf 'multibot_crm.urls' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
Как сказать reverse'у чтобы он искал в url.py нужного мне приложения? Пытался так: success_url = reverse('dialogs:commonly_files')
Главный app (multibot_crm/urls.py):
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('bots/', include('bot_manager.urls')),
path('dialogs/', include('dialogs.urls'))
]
Приложение dialogs (dialogs/urls.py) в котором reverse() не хочет видеть паттерн с name = commonly_files:
from django.urls import path
from . import views
urlpatterns = [
path('commonly_files/', views.CommonlyFiles.as_view(), name='commonly_files'),
path('commonly_files/upload', views.CommonlyFilesUpload.as_view(), name='commonly_files_upload'),
]
Ответы (1 шт):
Автор решения: Sherlock
→ Ссылка
from django.urls import reverse_lazy
class CommonlyFilesUpload(FormView):
form_class = CommonlyFilesForm
template_name = 'dialogs/add_commonly_files.html'
success_url = reverse_lazy('commonly_files')
Так должно сработать.