Django - 不是注册的命名空间

时间:2017-01-26 21:25:20

标签: python django

我正在尝试使用以下代码处理django / python中的表单。

home.html的:

<form action="{% url 'home:submit' %}"method='post'>

views.py:

def submit(request):
    a = request.POST(['initial'])
    return render(request, 'home/home.html', {
        'error_message': "returned"
    })

urls.py:

url(r'^submit/$', views.submit, name='submit'),

当我尝试在浏览器中运行它时,我收到错误:

NoReverseMatch at / home / u&#39; home&#39;不是注册的命名空间 而且我也知道表格中有错误?

10 个答案:

答案 0 :(得分:17)

您只需在模板中更改操作网址:

<form action="{% url 'submit' %} "method='post'>

关于url名称空间的注释......

为了能够使用home命名空间调用网址,您应该在主urls.py文件行中输入以下内容:

url(r'^', include('home.urls', namespace='home')),

答案 1 :(得分:5)

在您的主项目中,首先打开url.py。然后检查,首先应该声明app_name。如果不是,则声明它。

例如,我的应用名称是在url.py中声明的用户信息

app_name = "userinfo"

urlpatterns = [
    url(r'home/', views.home, name='home'),
    url(r'register/', views.registration, name='register')
]

答案 2 :(得分:3)

对于Django 3.0,如果您要在应用程序中处理网址,并在include中将pathproject/urls.py一起使用,则:

urlpatterns = [
    path(os.getenv('ADMIN_PATH'), admin.site.urls),
    path('', include('my_simple_blog.urls', namespace='my_simple_blog')),
    path('account/', include('account.urls', namespace='account')),
]

您需要在namespace中指定include

然后在您的app/urls.py中:

app_name = 'account'

urlpatterns = [
    path('register/', registration_view, name='register'),
    path('logout/', logout_view, name='logout'),
    path('login/', login_view, name='login'),
]

app_name必须与您在namespace中指定的project/urls.py相匹配。

每当您引用这些网址时,都需要这样做:

{% url 'namespace:name' %}

如果您将其与redirect一起使用:

return redirect('namespace:name')

答案 3 :(得分:2)

正如azmirfakkri所说,如果您使用的是redirect,请不要使用此{% url 'namespace:name' %}语法,而要使用return redirect('namespace:name')

答案 4 :(得分:2)

对于命名空间错误, 确保您已在主 urls.py 文件中链接了应用程序的 url

path('app_name/',include('app_name.urls'))

也在你的应用程序的 urls.py 中,确保你提到应用程序的名称

app_name='app_name'

还要确保您已在 settings.py 中已安装的应用程序中注册了应用程序的名称

答案 5 :(得分:1)

可能有两件事可能是根本原因, 在app / urls.py中确实包含以下内容

app_name = 'required_name'

并且在项目urls.py中还包含app_name

url(r'^required_name/$',views.home,name='required_name'),

检查:在settings.py INSTALLED_APPS中注册应用

答案 6 :(得分:0)

标签的名称在项目内应用程序包内的urls.py文件中必须是唯一的!对于模板标记来说,路由什么是什么,在哪里是重要的。

urls.py文件中的[1]现在,您需要声明变量appName并为其赋予唯一值。例如appName = "myApp";在您的情况下 myHomeApp 和[2]也定义了urlpatterns列表...

urlpatterns = [..., url(r'^submit/$', views.submit, name='submit'), ...];

在html文件中,只需将url标记更改为:

<form action="{% url 'myHomeApp:submit' %}" method='post'>

这应该可以解决...否则只需在这里写,我们将继续学习

答案 7 :(得分:0)

我经常发现的一个常见错误是,模板中有一些名称空间时, 并且在YourApp.url中没有任何名称空间,因此,如果您应该使用名称空间,请添加 在YourApp.url中是这样的     app_name =“博客”

然后在您的太阳穴上确保添加名称空间, 因此您将遇到类似“假设错误来自edit.html”的问题 然后在该特定模板上执行此操作
"{% url 'blog:vote' pk=post.pk %}" "{% url 'blog:post_category' category.name %}"

答案 8 :(得分:0)

我也面临同样的问题。  现在可以通过添加

进行修复
app_name = "<name of your app>" in app/urls.py

答案 9 :(得分:0)

如果您碰巧嵌套Enumerable,则名称空间会复合,例如。 include(