NoReverseMatch at /polls/ 在/polls/处发生了NoReverseMatch错误。
NoReverseMatch at /polls/ 在/polls/处发生了NoReverseMatch错误。
我正在根据Django教程制作一个网站。\n我遇到了一个错误:\n
\n在/polls/处找不到没有参数的“index”的反向匹配。尝试了1个模式:[\'$/\']。\n
\n错误\n跟踪显示:\n
跟踪: File "/Users/XXX/django/django/core/handlers/exception.py" in inner 35. response = get_response(request) File "/Users/XXX/django/django/core/handlers/base.py" in _get_response 130. response = self.process_exception_by_middleware(e, request) File "/Users/XXX/django/django/core/handlers/base.py" in _get_response 128. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/XXX/djangostudy/polls/views.py" in index 23. 'questions': Question.objects.all(), File "/Users/XXX/django/django/shortcuts.py" in render 36. content = loader.render_to_string(template_name, context, request, using=using) File "/Users/XXX/django/django/template/loader.py" in render_to_string 62. return template.render(context, request) File "/Users/XXX/django/django/template/backends/django.py" in render 61. return self.template.render(context) File "/Users/XXX/django/django/template/base.py" in render 175. return self._render(context) File "/Users/XXX/django/django/template/base.py" in _render 167. return self.nodelist.render(context) File "/Users/XXX/django/django/template/base.py" in render 943. bit = node.render_annotated(context) File "/Users/XXX/django/django/template/base.py" in render_annotated 910. return self.render(context) File "/Users/XXX/django/django/template/loader_tags.py" in render 155. return compiled_parent._render(context) File "/Users/XXX/django/django/template/base.py" in _render 167. return self.nodelist.render(context) File "/Users/XXX/django/django/template/base.py" in render 943. bit = node.render_annotated(context) File "/Users/XXX/django/django/template/base.py" in render_annotated 910. return self.render(context) File "/Users/XXX/django/django/template/loader_tags.py" in render 155. return compiled_parent._render(context) File "/Users/XXX/django/django/template/base.py" in _render 167. return self.nodelist.render(context) File "/Users/XXX/django/django/template/base.py" in render 943. bit = node.render_annotated(context) File "/Users/XXX/django/django/template/base.py" in render_annotated 910. return self.render(context) File "/Users/XXX/django/django/template/defaulttags.py" in render 447. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "/Users/XXX/django/django/urls/base.py" in reverse 87. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "/Users/XXX/django/django/urls/resolvers.py" in _reverse_with_prefix 488. raise NoReverseMatch(msg) 异常类型:NoReverseMatch 在/polls/处 异常值:找不到没有参数的“index”的反向匹配。尝试了1个模式:['$/']
\n我在base.html中编写的与父级应用程序相同的代码如下:\n
{% load staticfiles %} {% load bootstrap3 %}Starter Template for Bootstrap Tutorial {% bootstrap_messages messages %} {% block contents %}{% endblock %}
\n父级目录的urls.py如下:\n
from django.conf.urls import include,url from django.contrib import admin from polls.views import index urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^polls/',include('polls.urls')), url(r'^$/',index,name='index'), ]
\n子应用程序的urls.py如下:\n
from django.conf.urls import url from django.views.generic import TemplateView from . import views app_name="polls" urlpatterns = [ url(r'^$',views.index,name='index'), url(r'(?P\d+)/$', views.detail, name='poll_detail'), url(r'(?P \d+)/vote$', views.vote, name='poll_vote'), url(r'(?P \d+)/results$', views.results, name='poll_results'), url(r'^$',TemplateView.as_view(template_name='app/index.html'),name='app_index'), url(r'^form$', views.form_test), ]
\n我真的不明白为什么会出现这个错误。指定的\"{% url \'index\' %}\"
的方式是错误的吗?我该如何解决这个问题?\n我的views.py如下:\n
from django.shortcuts import render from django.urls import reverse_lazy from django.utils.html import mark_safe from .models import Question from django.http import HttpResponse from django.shortcuts import Http404 from django.shortcuts import get_object_or_404,redirect from .models import Choice from django.views.generic import TemplateView from django.views.generic import DetailView from django.views.generic import ListView from .forms import MyForm from .forms import VoteForm from django.views.generic import FormView from django.views.generic.detail import SingleObjectMixin from django.shortcuts import resolve_url def index(request): return render(request,'polls/index.html',{ 'questions': Question.objects.all(), }) def vote(request,pk): question = get_object_or_404(Question,pk=pk) try: selected_choice = question.choice_set.get(pk=request.POST['choice']) except (KeyError,Choice.DoesNotExist): return render(request,'poll/detail.html',{ 'question':question, 'error_message':"You didn't select a choice", }) else: selected_choice.votes += 1 selected_choice.save() return redirect('index') return redirect('poll_results', pk) # pass def results(request,pk): obj = get_object_or_404(Question,pk=pk) return render(request,'polls/results.html',{ 'question':obj, }) class FormTest(FormView): form_class = MyForm template_name = 'polls/form.html' success_url = reverse_lazy('polls:index') form_test = FormTest.as_view() class Detail(SingleObjectMixin,FormView): model = Question form_class = VoteForm context_object_name = 'question' template_name = 'polls/detail.html' def get(self, request, *args, **kwargs): self.object = self.get_object() return super().post(request, *args, **kwargs) def post(self, request, *args, **kwargs): self.object = self.get_object() return super().post(request, *args, **kwargs) def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs['question'] = self.object return kwargs def form_valid(self, form): form.vote() return super().form_valid(form) def get_success_url(self): return resolve_url('polls:results',self.kwargs['pk']) detail = Detail.as_view()
\n我的目录如下:\n目录
问题的出现原因是在URL配置中的语法错误,即在 url(r'^$/',
这一行代码中,多余了一个斜杠('/')。正确的写法应该是 url(r'^$'
,即去掉多余的斜杠。原因是我们在设置URL时,必须在URL的末尾加上$符号,以确保只匹配完整URL路径。
解决方法是修改URL配置中的错误语法,即将多余的斜杠('/')删除。修改之后的代码应该是 url(r'^$'
。
另外,问题可能还出现在index视图函数的缺失或导入错误上。我们需要确认是否存在名为index的视图函数,并且在URL配置中正确导入了该视图函数。如果没有,需要添加或修复该视图函数,并确保在URL配置中正确导入。
总结起来,要解决这个NoReverseMatch错误,我们需要检查和修复两个方面的问题。首先,我们需要修复URL配置中的语法错误,即去掉多余的斜杠('/')。其次,我们需要确认是否存在名为index的视图函数,并且在URL配置中正确导入了该视图函数。根据具体情况进行修改和修复后,即可解决该错误。
在上述内容中,出现了一个名为 "NoReverseMatch at /polls/" 的问题。问题的原因是有重复的URL和URL名称“index”。为了解决这个问题,需要修改相关的URL配置。
首先,在polls.urls中,需要更改URL配置,确保没有重复的URL名称。例如:
urlpatterns = [ url(r'^$', TemplateView.as_view(template_name='app/index.html'), name='app_index'), url(r'(?P\d+)/$', views.detail, name='poll_detail'), url(r'(?P \d+)/vote$', views.vote, name='poll_vote'), url(r'(?P \d+)/results$', views.results, name='poll_results'), url(r'^form$', views.form_test), ]
然后,在urls.py文件中,也需要修改URL配置,确保没有重复的URL。
urlpatterns = [ url(r'^$', index, name='index'), url(r'^admin/', admin.site.urls), url(r'^polls/', include('polls.urls')), ]
此外,可能还需要检查相关逻辑是否正确。
如果在修改后出现了"TemplateDoesNotExist at /polls/ templates/polls/index.html"错误,可以参考以下解决方法:
首先,可以参考以下链接中的解决方案:templatedoesnotexist。
如果以上解决方法没有帮助,可以将你的设置TEMPLATE_DIRS添加到问题中,以便更好地理解问题。
如果你在polls/templates/polls/index.html中使用了include语句,请尝试将其替换为template_name='polls/index.html'。
如果你在settings.py的父级目录中添加了TEMPLATE_DIRS设置,但仍然出现"TemplateDoesNotExist at /polls/ templates/polls/index.html"错误,请检查你的BASE_DIR设置是否正确。你可以尝试使用以下代码来设置BASE_DIR:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
如果问题仍然存在,可以尝试将template_name设置为'base.html',并创建一个新的问题来解决这个新的错误。
问题的原因是有重复的URL和URL名称“index”。为了解决这个问题,需要修改相关的URL配置,确保没有重复的URL和URL名称。此外,还需要检查相关逻辑是否正确,并确保模板文件的路径设置正确。如果问题仍然存在,可以尝试调整模板文件的名称或创建一个新的问题来解决这个新的错误。
NoReverseMatch at /polls/ 这个问题出现的原因是在urls.py文件中有相同的URL对应不同的视图函数,但Django只会考虑第一个URL。解决方法是从父URL中移除重复的URL。
url(r'^$/',index,name='index'),
感谢您的回答,我已经从父URL中删除了index的URL,但是出现了NoReverseMatch at /polls/ Reverse for 'index' not found. 'index' is not a valid view function or pattern name. 错误。请问我该如何修复这个问题?
抱歉,你应该使用下面这个语法:
url(r'^$/',views.index,name='index'),
解决方法是将视图函数index包括在views模块中,并确保在urls.py文件中正确地指定了该视图函数对应的URL。