Django - 不是注册的命名空间

Pro*_*err 17 python django

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

home.html的:

<form action="{% url 'home:submit' %}"method='post'>
Run Code Online (Sandbox Code Playgroud)

views.py:

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

urls.py:

url(r'^submit/$', views.submit, name='submit'),
Run Code Online (Sandbox Code Playgroud)

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

在/ home/u'home'的NoReverseMatch不是一个注册的命名空间,我也知道表单中有错误?

mis*_*sak 21

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

<form action="{% url 'submit' %} "method='post'>
Run Code Online (Sandbox Code Playgroud)

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

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

url(r'^', include('home.urls', namespace='home')),
Run Code Online (Sandbox Code Playgroud)

  • django 3(可能还有 django 2):路径('someurl',include(('home.urls','home'),namespace='home')) (4认同)

vik*_*ads 11

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

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

app_name = "userinfo"

urlpatterns = [
    url(r'home/', views.home, name='home'),
    url(r'register/', views.registration, name='register')
]
Run Code Online (Sandbox Code Playgroud)


小智 10

我也面临同样的问题。现在通过添加修复它

app_name = "<name of your app>" 
Run Code Online (Sandbox Code Playgroud)

在 app/urls.py 中


小智 8

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

path('app_name/',include('app_name.urls'))
Run Code Online (Sandbox Code Playgroud)

同样在应用程序的 urls.py 中,确保将应用程序的名称提及为

app_name='app_name'
Run Code Online (Sandbox Code Playgroud)

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


mah*_*f_i 5

Django的3.0,如果你正在处理的应用程序中的网址,并使用includepath在您project/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')),
]
Run Code Online (Sandbox Code Playgroud)

您需要namespaceinclude.

然后在你的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'),
]

Run Code Online (Sandbox Code Playgroud)

app_name必须符合namespace您在指定project/urls.py

每当您提到这些网址时,您都需要这样做:

{% url 'namespace:name' %}
Run Code Online (Sandbox Code Playgroud)

如果您使用它redirect

return redirect('namespace:name')
Run Code Online (Sandbox Code Playgroud)