Python Django 1.11 Django.url.exceptions.NoReverseMatch:
我一直试图找到一个和我想要的一样的问题,但这个问题似乎和我想要的不一样。我仍然开始学习Django,python框架。我遵循django文档中的教程,当我试图学习泛型视图时,我被卡住了。我将显示我的代码: url.pyPython 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 = [
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')),