Python Django 1.11 Django.url.exceptions.NoReverseMatch:

Python Django 1.11 Django.url.exceptions.NoReverseMatch:,python,django,frameworks,django-views,Python,Django,Frameworks,Django Views,我一直试图找到一个和我想要的一样的问题,但这个问题似乎和我想要的不一样。我仍然开始学习Django,python框架。我遵循django文档中的教程,当我试图学习泛型视图时,我被卡住了。我将显示我的代码: url.py from django.conf.urls import url from mulai.views import IndexView, DetailView, ResultsView, votes app_name = "start" urlpatterns = [

我一直试图找到一个和我想要的一样的问题,但这个问题似乎和我想要的不一样。我仍然开始学习Django,python框架。我遵循django文档中的教程,当我试图学习泛型视图时,我被卡住了。我将显示我的代码:

url.py

from django.conf.urls import url

from mulai.views import IndexView, DetailView, ResultsView, votes

app_name = "start"
urlpatterns = [
    url(r'^$', IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>[0-9]+)/results/$', ResultsView.as_view(), name='results'),
    url(r'^(?P<choice_question_id>[0-9]+)/votes/$', votes, name='votes')

]
我从detail.html中得到的错误是:

django.urls.exceptions.NoReverseMatch: Reverse for 'votes' not found. 'votes' is not a valid view function or pattern name.
树文件夹项目:

├── db.sqlite3
├── manage.py
├── mulai
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       ├── 0001_initial.cpython-36.pyc
│   │       └── __init__.cpython-36.pyc
│   ├── models.py
│   ├── __pycache__
│   │   ├── admin.cpython-36.pyc
│   │   ├── apps.cpython-36.pyc
│   │   ├── __init__.cpython-36.pyc
│   │   ├── models.cpython-36.pyc
│   │   ├── tests.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── views.cpython-36.pyc
│   ├── templates
│   │   └── mulai
│   │       ├── detail.html
│   │       ├── index.html
│   │       └── results.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
└── start
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-36.pyc
    │   ├── settings.cpython-36.pyc
    │   ├── urls.cpython-36.pyc
    │   └── wsgi.cpython-36.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py
这一行在这里:

url(r'^(?P<choice_question_id>[0-9]+)/votes/$', votes, name='votes')
你跟得不够近。在详细信息视图中,没有变量
问题列表
,而是
问题
。要获得选择,您可以循环通过问题的选择集

<form action="{% url 'start:votes' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
...

{%csrf_令牌%}
{问题中的选项为%choice\u set.all%}
...

请注意,
投票
视图中的参数
choice\u-pertanyan\u-id
与URL模式中的
choice\u-question\u-id
不匹配。最好像教程中那样使用
question\u id

我假设您的项目名为start。对吗

这将是文件的正确结构(尤其是url.py和视图)

start/url.py
是主要的url.py。看起来基本上是这样的:

 urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^mulai/', include('mulai.urls')),
    url(r'^mulai/', include('mulai.urls', namespace='start')),
然后在
mulai/url.py
中,您可以这样定义URL

urlpatterns = [
    url(r'^$', IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>[0-9]+)/results/$', ResultsView.as_view(), name='results'),
    url(r'^(?P<choice_question_id>[0-9]+)/votes/$', votes, name='votes')
]

您的视图中似乎没有定义投票函数。我在视图中定义了投票函数,请看问题。我已经更新了这个问题。URL中的id变量名应该与视图函数中的id变量名相同。但是错误不在视图中,而是在URL扫描中。请共享项目的文件结构?很抱歉,但仍然是错误。误差和上次一样。??你的应用程序名称应该是与你的项目结构相关的
mulai
。您的整个项目如何命名为
start
?您的项目结构和URL加载有问题。我认为,这不是问题所在。问题是在URL文件中找不到投票。当我尝试将应用程序名称从“开始”更改为“mulai”时,结果仍然是给我一个错误。请参阅我的答案2Im sorry@Alasdair,但错误不在循环中,但“投票”没有定义。我答案的第一部分与循环无关。在
{%url%}
标记中使用
问题列表.id
是不正确的。如果我的答案不能解决问题,那么您需要用更多信息更新您的问题-添加错误消息的完整回溯,添加
start/url.py
的内容,并更新代码,使其与当前代码完全匹配。
<form action="{% url 'start:votes' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
...
├── manage.py
└── start
   ├── settings.py
   ├── urls.py
├── mulai
   ├── admin.py
   ├── models.py
   ├── templates
   ├── urls.py
   └── views.py
 urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^mulai/', include('mulai.urls')),
urlpatterns = [
    url(r'^$', IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>[0-9]+)/results/$', ResultsView.as_view(), name='results'),
    url(r'^(?P<choice_question_id>[0-9]+)/votes/$', votes, name='votes')
]
    url(r'^mulai/', include('mulai.urls', namespace='start')),