Django错误u“';民意调查;不是已注册的命名空间
昨天,我正在使用本教程开发我的第一个应用程序。这是一个民意调查和选择应用程序。 第一个页面显示问题,当你点击问题时,它会显示你可以投票的选项 昨天有很多人帮了我,告诉我使用名称空间。我已经阅读了名称空间教程,并尝试应用我的知识 但到目前为止还不起作用 这是我点击第一页的问题时的错误Django错误u“';民意调查;不是已注册的命名空间,django,namespaces,Django,Namespaces,昨天,我正在使用本教程开发我的第一个应用程序。这是一个民意调查和选择应用程序。 第一个页面显示问题,当你点击问题时,它会显示你可以投票的选项 昨天有很多人帮了我,告诉我使用名称空间。我已经阅读了名称空间教程,并尝试应用我的知识 但到目前为止还不起作用 这是我点击第一页的问题时的错误 NoReverseMatch at /polls/5/ u"'polls" is not a registered namespace Request Method: GET Request URL
NoReverseMatch at /polls/5/
u"'polls" is not a registered namespace
Request Method: GET
Request URL: http://127.0.0.1:8000/polls/5/
Django Version: 1.4.3
Exception Type: NoReverseMatch
Exception Value:
u"'polls" is not a registered namespace
Exception Location: C:\hp\bin\Python\Lib\site-packages\django\template\defaulttags.py in render, line 424
Python Executable: C:\hp\bin\Python\python.exe
Python Version: 2.5.2
Python Path:
['C:\\djcode\\mysite',
'C:\\hp\\bin\\Python\\python25.zip',
'C:\\hp\\bin\\Python\\DLLs',
'C:\\hp\\bin\\Python\\lib',
'C:\\hp\\bin\\Python\\lib\\plat-win',
'C:\\hp\\bin\\Python\\lib\\lib-tk',
'C:\\hp\\bin\\Python',
'C:\\hp\\bin\\Python\\lib\\site-packages',
'C:\\hp\\bin\\Python\\lib\\site-packages\\win32',
'C:\\hp\\bin\\Python\\lib\\site-packages\\win32\\lib',
'C:\\hp\\bin\\Python\\lib\\site-packages\\Pythonwin']
Server time: Fri, 15 Feb 2013 21:04:10 +1100
Error during template rendering
In template C:\djcode\mysite\myapp\templates\myapp\detail.html, error at line 5
u"'polls" is not a registered namespace
1 <h1>{{ poll.question }}</h1>
2
3 {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
4
5 {% url 'polls:vote' poll.id %}
6 {% csrf_token %}
7 {% for choice in poll.choice_set.all %}
8 <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
9 <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
10 {% endfor %}
11 <input type="submit" value="Vote" />
12 </form>
我的应用程序文件夹名为myapp,这是myapp URLconf:
C:\djcode\mysite\myapp
from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls import patterns, include, url
urlpatterns = patterns('myapp.views',
url(r'^$', 'index'),
url(r'^(?P<poll_id>\d+)/$', 'detail'),
url(r'^(?P<poll_id>\d+)/results/$', 'results'),
url(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
)
My detail.html
C:\djcode\mysite\myapp\templates\myapp
<h1>{{ poll.question }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
{% url 'polls:vote' poll.id %}
{% csrf_token %}
{% for choice in poll.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>
{{poll.question}
{%if error\u message%}{{{error\u message}{%endif%}
{%url'投票:投票'poll.id%}
{%csrf_令牌%}
{poll.choice_set.all%}
{{choice.choice_text}}
{%endfor%}
从django.conf.url导入模式,包括,url
从django.contrib导入管理
从django.conf导入设置
urlpatterns=patterns('myapp.views',
url(r'^$',index',name=“index”),
url(r'^(?P\d+/$,'detail',name=“detail”),
url(r'^(?P\d+)/results/$,“results”,name=“results”),
url(r'^(?P\d+)/vote/$,'vote',name=“vote”),
)
----------------------------------
{{poll.question}
{%if error\u message%}{{{error\u message}{%endif%}
{%csrf_令牌%}
{poll.choice_set.all%}
{{choice.choice_text}}
{%endfor%}
您需要在detail.html的顶部添加以下行:
{% load url from future %}
(注意,为了使用轮询名称空间,您已经在index.html中使用了这一行)答案是将名称空间添加到根URLconf中。在mysite/urls.py文件(项目的urls.py,而不是应用程序的)中,继续并将其更改为包含名称空间:
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),
)
此外,在本教程的第3部分中,使用app_name是添加轮询名称空间的公认方式。您可以在polls/url.py
中为此添加行,如下所示:
app_name = 'polls'
urlpatterns = [
...
]
更换线路:
{%url'投票:投票'poll.id%}
与:
{%url'vote'poll.id%}
为我解决了…重新启动web服务器。仅此而已。遵循相同的Django教程并使用相同的名称, 我不得不在
mysite/url.py
发件人:
致:
命名空间应添加到polls/url.py文件中
url(r'^myapp/$', include('myapp.urls', namespace ='myapp')),
在myapp/url.py中添加以下模块级属性:
app_name = "polls"
这将为该应用程序设置“应用程序命名空间名称”。当您反向使用“polls:submit”这样的名称时,Django将查看两个位置:应用程序名称空间(如上所述设置)和实例名称空间(使用“url”函数中的namespace=参数设置)。如果您的项目中有多个应用程序实例,则后者很重要,但通常是您想要的前者
我遇到了这个问题,在url()函数中设置namespace=似乎有点错误
请参见本教程的以下条目:
更新:此信息适用于Django 1.9。在1.9之前,向include添加namespace=属性确实是正确的方法。我认为您错过了名称空间:
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
)
问题在教程中。 在将名称空间(在“myapp”中)添加到URLconf时,本教程使用以下行代码:
app_name = 'myapp'
出于某种原因,Django框架将其视为unicode字符串。请用双引号而不是单引号将应用程序的名称括起来。
比如说,
app_name = "myapp"
这肯定会解决你的问题。我也遇到了同样的问题,这样就解决了它。Django 2.0 在yourapp/url.py中 在url.py中 适用于使用“django主机”的任何人: 我也有同样的错误,对我来说,将此添加到我的模板解决了它(没有名称空间等的任何us):
{%load hosts%}
另外,我在我的settings.py中添加了PARENT\u HOST='YOUR\u PARENT\u HOST'
我也面临同样的问题。 现在通过添加
app\u name=”“
在app/url.py
中,在模板顶部添加{%load url from future%}
,或者尝试删除url标记中围绕'polls:vote'
的引号。我试过了,它说TemplateSyntaxError at/polls/3/。感谢您尝试帮助我您使用的是哪个版本的django,您是否尝试过在不更改报价的情况下从future添加模板标记加载url?django版本:1.4.3,几天来我出现了这个错误,但我只是忽略了它,但现在我正在尝试解决这个问题。@cathy,上次我用python anywhere做了错误的版本,我想我会忽略它,但现在我用我的电脑做了。我不知道该怎么办,你能帮我吗!对不起,我又发了这个问题。上一次我发布它时,我使用了一个名为python anywhere的在线python,我阅读了错误的教程版本,但现在我使用的是正确版本的计算机,我仍然收到了这个错误。不,它仍然不起作用@cathy。我想这是detail.html,但我不知道你认为这可能是我的设置.py吗?我尝试在模板顶部{%load url from future%}并删除{%url'polls:vote'poll.id%}中的引号,但它只是显示语法错误。那么,刚才发生了什么?我们是否也可以下载该文件?我也遇到了同样的错误。请注意“名称空间”一词实际上,这不是推荐的方式,当你说“polls:…”时,它会出现在两个名称空间中,应用程序名称空间和实例名称空间。在URL上设置“namespace”属性会将路由器添加到实例名称空间中。通常,您只需要使用应用程序名称空间,方法是将app_name=“polls”添加到polls/url.py中。硒
url(r'^myapp/$', include('myapp.urls', namespace ='myapp')),
app_name = "polls"
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
)
app_name = 'myapp'
app_name = "myapp"
from django.urls import path
from . import views
app_name = 'yourapp'
urlpatterns = [
path('homepage/', views.HomepageView.as_view(), name='homepage'),
]
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('yourapp/', include('yourapp.urls')),
]
{% load hosts %}
<a href="{% host_url 'YOUR_URL' host 'YOUR_HOST' %}">Admin dashboard</a>