我有一个应用程序,它将显示有关我组中人员的一些信息。尝试在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
显然我缺少一些东西。
答案 0 :(得分:0)
这可能是网址的附加/吗?
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='specialist')
主键修饰符之后的那个。点击网址时(使用(%网址&#39;:&#39; model.name%))您的浏览器会显示哪个网址?
答案 1 :(得分:0)
我最终废弃了这个实现,并采用了更扁平的结构,所有模型,视图和模板都在同一个应用程序中。我在新设计中没有遇到这个问题。