我正在尝试使用以下代码处理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;不是注册的命名空间 而且我也知道表格中有错误?
答案 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
中将path
与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')),
]
您需要在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(