从定义的视图调用时,Django HttpResponseRedirect保留的名称空间问题

时间:2018-12-27 19:18:20

标签: python django django-forms django-views

每当我将重定向设置为另一个定义的视图时,就会收到名称空间错误。我在urls.py中定义了一个app_name,但是我很确定自己缺少明显的东西。

错误:

enter code here`Traceback (most recent call last):
  File "/root/areports/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/root/areports/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/root/areports/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/root/areports/reports/views.py", line 15, in entry_create_view
    return HttpResponseRedirect(reverse('reports:new_district_view'))
  File "/root/areports/venv/lib/python3.6/site-packages/django/urls/base.py", line 86, in reverse
    raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'reports' is not a registered namespace

views.py

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from .forms import New_Event_Form, New_District_Form


def entry_create_view(request):
    form = New_Event_Form(request.POST or None)
    if form.is_valid():
        form.save()
        #form = New_Event_Form()
        context = {
            "form": form
        }
        return HttpResponseRedirect(reverse('reports:new_district_view'))
    else:
        print('Invalid')
        context = {
                'form': form,
        }
        return render(request, "entry_create.html", context)


def new_district_view(request):
    new_district = New_District_Form(request.POST)
    if new_district.is_valid():
        new_district.save()
        new_district = New_District_Form()
        context = {
            "new_district": new_district
        }
        return render(request, "new_district.html", context)
    else:
        print('Invalid')
        context = {
            "new_district": new_district
        }
        return render(request, "new_district.html", context)


def home_view(request):
    return render(request, "home.html", {})

urls.py

from django.contrib import admin
from django.urls import path
from reports import views

app_name = 'reports'

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home_view, name='home'),
    path('home/', views.home_view, name='home'),
    path('create/', views.entry_create_view, name='create_event'),
    path('district/', views.new_district_view, name='new_district_view')
]

我怀疑问题出在我的项目文件夹结构上,所以我在下面添加了一个简短的树。

areports
|--areports
|  |--settings.py
|  |--urls.py
|  
|--reports
|  |--static
|  |--templates
|  |  |--(all project templates)
|  |--admin.py
|  |--apps.py
|  |--forms.py
|  |--models.py
|  |--views.py
|
|--db
|--manage.py

1 个答案:

答案 0 :(得分:0)

根据Borut的反馈,将'reports:new_district_view'更改为'new_district_view'。