获取NoReverseMatch错误

时间:2016-11-16 23:24:55

标签: python django

我有一个应用程序,它将显示有关我组中人员的一些信息。尝试在index.html中使用url标记时,我收到NoReverseMatch错误。如果我不使用url标记,但指定root,我不会收到错误。

错误说:

  

NoReverseMatch at /   使用参数'(1,)'和关键字参数'{}'找不到“专家”的反转。尝试了1种模式:['$(?P [0-9] +)/']

这是urls.py文件。

来自主wi_tech urls.py:

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
    url(r'^$', include('person.urls')),
    url(r'^tech/', include('person.urls')),
    url(r'^admin/', admin.site.urls),
]

来自'person'app urls.py:

from django.conf.urls import url
from . import views
app_name = 'person'
urlpatterns = [
     url(r'^$', views.IndexView.as_view(), name='index'),
     url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='specialist'),
]

我的views.py文件如下所示:

from django.views import generic
from .models import Specialist
class IndexView(generic.ListView):
    template_name = 'person/index.html'
    context_object_name = 'person_list'

    def get_queryset(self):
        """Return all specialists"""
        return Specialist.objects.order_by('id')
class DetailView(generic.DetailView):
    model = Specialist
    template_name = 'person/detail.html'

我的index.html页面如下所示:

{% if person_list %}
    <ul>
    {% for specialist in person_list %}
        <li><a href="{% url 'person:specialist' specialist.id %}"> {{ specialist }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No specialists are available.</p>
{% endif %}

如果我将index.html中的标记更改为此标记,则可以:

<li><a href="/tech/{{specialist.id}}"> {{ specialist }}</a></li>

显然,如果Web根目录发生变化,这不是一个理想的情况。我已经回顾了很多这方面的问题,似乎没有什么比得上。我认为问题是正则表达式开头的“$”,但我看不出它来自哪里。

具体来说,我使用这个链接作为一个非常好的参考点,但是通过我的代码看空了。 what is NoReverseMatch and how do i fix it

显然我缺少一些东西。

2 个答案:

答案 0 :(得分:0)

这可能是网址的附加/吗?

url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='specialist')

主键修饰符之后的那个。点击网址时(使用(%网址&#39;:&#39; model.name%))您的浏览器会显示哪个网址?

答案 1 :(得分:0)

我最终废弃了这个实现,并采用了更扁平的结构,所有模型,视图和模板都在同一个应用程序中。我在新设计中没有遇到这个问题。