Django - 不是注册的命名空间

新手上路,请多包涵

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


主页.html:

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


意见.py:

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


网址.py:

 from django.conf.urls import url
from . import views

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

当我尝试在浏览器中运行它时出现错误:

NoReverseMatch at /home/ u'home' is not a registered namespace

和另一条错误消息,指示表单有问题。

原文由 Programmerr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

您应该只更改模板中的操作网址:

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


关于 url 命名空间…

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

对于 Django 1.x:

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

对于 Django 2.x 和 3.x

 path('', include(('home.urls', 'home'), namespace='home'))

原文由 mislavcimpersak 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

app_name = "userinfo"

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

原文由 vikasvmads 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题