NoReverseMatch at /polls/ 在/polls/处发生了NoReverseMatch错误。

22 浏览
0 Comments

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
    
    
    
  
  
    
    {% 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目录

0
0 Comments

问题的出现原因是在URL配置中的语法错误,即在 url(r'^$/', 这一行代码中,多余了一个斜杠('/')。正确的写法应该是 url(r'^$',即去掉多余的斜杠。原因是我们在设置URL时,必须在URL的末尾加上$符号,以确保只匹配完整URL路径。

解决方法是修改URL配置中的错误语法,即将多余的斜杠('/')删除。修改之后的代码应该是 url(r'^$'

另外,问题可能还出现在index视图函数的缺失或导入错误上。我们需要确认是否存在名为index的视图函数,并且在URL配置中正确导入了该视图函数。如果没有,需要添加或修复该视图函数,并确保在URL配置中正确导入。

总结起来,要解决这个NoReverseMatch错误,我们需要检查和修复两个方面的问题。首先,我们需要修复URL配置中的语法错误,即去掉多余的斜杠('/')。其次,我们需要确认是否存在名为index的视图函数,并且在URL配置中正确导入了该视图函数。根据具体情况进行修改和修复后,即可解决该错误。

0
0 Comments

在上述内容中,出现了一个名为 "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名称。此外,还需要检查相关逻辑是否正确,并确保模板文件的路径设置正确。如果问题仍然存在,可以尝试调整模板文件的名称或创建一个新的问题来解决这个新的错误。

0
0 Comments

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。

0