首页 > 解决方案 > 如何在 Django 中找出 NoReverseMatch

问题描述

嗨,感谢您抽出宝贵时间我使用 Django,但遇到以下问题:

当我尝试转到仪表板页面或 event_list 页面时,我收到错误消息。我知道这取决于放置在使用 EventoDetailView 和 url name=dettagli 的模板文件中的 url 链接,但我不明白原因。我试图弄清楚,但我无法做到这一点。这是代码:

模型.py

class Evento(models.Model):
  nome = models.CharField(max_length=200, default='', blank=True, null=True)
  descrizione = models.TextField(max_length=5000, default='', blank=True, null=True)
  slug = models.SlugField()
  objects = models.Manager()
  cover = models.ImageField(upload_to='media/', default='', blank=True, null=True)
  data = models.DateTimeField(auto_now=False, auto_now_add=False, blank=True, null=True)
  author = models.ForeignKey("auth.User", on_delete=models.CASCADE, verbose_name="Balneatore", null=True)

  stabilimento = models.ForeignKey(Stabilimento, blank=True, null=True)
  saved = models.ManyToManyField(User, related_name='saved', blank=True)

  def __unicode__(self):
    return self.nome

  def total_saved(self):
    return self.saved.count()

  def get_absolute_url(self):
    return reverse("eventi:dettagli", args=[self.id])

  class Meta:
    verbose_name = "Evento"
    verbose_name_plural = "Eventi"

@receiver(pre_save, sender=Evento)
def pre_save_slug(sender, **kwargs):
  print (kwargs)
  slug = slugify(kwargs['instance'].nome)
  kwargs['instance'].slug = slug

视图.py

 def EventiListView(request):
    evento_list = Evento.objects.all()
    evento_filter = EventoFilter(request.GET, queryset=evento_list)

    context = {
      'evento_list': evento_list,
    }

    return render(request, 'evento_filter_list.html', {'filter': evento_filter}, context)




def EventoDetailView(request, id):
      evento = get_object_or_404(Evento, id=id)
      #eventi_salvati = Evento.objects.filter(saved=saved)

  is_saved = False
  if evento.saved.filter(id=request.user.id).exists():
    is_saved = True

  context = {
    'evento': evento,
    'is_saved': is_saved,
    'total_saved': evento.total_saved(),
    #'eventi_salvati': eventi_salvati,
  }

  return render(request, 'evento.html', context)

#dashboard balneatore = Eventi Balneatore
def EventiPubblicati(request):
    eventi = Evento.objects.filter(author=request.user)

    context = {
      "eventi": eventi,
    }

    return render(request, "eventi_pubblicati.html", context)

网址.py

urlpatterns = [
  url(r'^$', views.EventiListView, name='search'),
  url(r'(?P<id>\d)/$', views.EventoDetailView, name='dettagli'),
  url(r'(?P<id>\d+)/eventi-salvati/$', views.EventiSalvatiView, name="salvati"),
]

详细信息.html

<a class="text-white" href="{{ evento.get_absolute_url }}">

仪表板.html

<td><a href="{{ evento.get_absolute_url }}">{{evento.nome}}</a></td>
<td><a href="{% url 'update' evento.id %}" class = "btn btn-danger">Modifica</a></td>

标签: pythondjango

解决方案


这是事件页面错误

NoReverseMatch at /eventi/

Reverse for 'dettagli' with arguments '(21,)' not found. 1 pattern(s) tried: [u'eventi/(?P<id>\\d)/$']

Request Method:     GET
Request URL:    http://127.0.0.1:8000/eventi/
Django Version:     1.11.21
Exception Type:     NoReverseMatch
Exception Value:    

Reverse for 'dettagli' with arguments '(21,)' not found. 1 pattern(s) tried: [u'eventi/(?P<id>\\d)/$']

Exception Location:     /Library/Python/2.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 497
Python Executable:  /usr/bin/python
Python Version:     2.7.10
Python Path:    

['/Users/vittorio/Desktop/app varie/app3 nuovo/stabilimare',
 '/Library/Python/2.7/site-packages/pip-19.2.3-py2.7.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Python/2.7/site-packages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC']

Server time:    Gio, 5 Dic 2019 18:04:10 +0100

这是仪表板错误

NoReverseMatch at /dashboard/

Reverse for 'dettagli' with arguments '(21,)' not found. 1 pattern(s) tried: [u'eventi/(?P<id>\\d)/$']

Request Method:     GET
Request URL:    http://127.0.0.1:8000/dashboard/
Django Version:     1.11.21
Exception Type:     NoReverseMatch
Exception Value:    

Reverse for 'dettagli' with arguments '(21,)' not found. 1 pattern(s) tried: [u'eventi/(?P<id>\\d)/$']

Exception Location:     /Library/Python/2.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 497
Python Executable:  /usr/bin/python
Python Version:     2.7.10
Python Path:    

['/Users/vittorio/Desktop/app varie/app3 nuovo/stabilimare',
 '/Library/Python/2.7/site-packages/pip-19.2.3-py2.7.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Python/2.7/site-packages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC']

Server time:    Gio, 5 Dic 2019 18:17:53 +0100

名为 dettagli 的 url 转到事件详细信息页面,如果我手动键入 url,页面将正常工作。不起作用的页面是具有详细信息页面链接的页面。


推荐阅读