-1

我正在尝试将链接从应用程序重定向到另一个页面查看功能。但是在正确指向页面后,我在与它没有连接的应用程序主页上收到 NoReverseMatch Found 错误。

这是主项目 urls.py 的 urls.py

urlpatterns = [
    path('', views.home, name="home"),
    path('admin/', admin.site.urls),
    path('teacher/', include('teacher.urls')),
    path('student/', include('student.urls')),
]

这是相应应用程序的 urls.py,即教师 urls.py

urlpatterns = [
    path('', views.index, name="index"),
    path(r'^detailed/(?P<reportid>\d{0,4})/$', views.detailed, name="detailed"),
]

我还包括views.py,因为错误指向view.py views.py

def index(request):
    return render(request, 'teacher/report.html')
def detailed(request, reportid):
    weeklyr = wreport.objects.all()
    dailyr = dreport.objects.all()
    split = SplitOfWeek.objects.all()

    return render(request, 'teacher/detailed.html')

我尝试在教师应用程序r'^teacher/$'的主 urls.py 和r'^$'urls.py 中添加,但添加后显示为教师找到了 url。

这是详细的错误消息: Reverse for 'detailed' with no arguments not found. 1 pattern(s) tried: ['teacher/\\^detailed/\\(\\?P(?P<reportid>[^/]+)\\\\d\\{0,4\\}\\)/\\$$']

4

2 回答 2

0

你不应该使用正则表达式path

一个简单的解决方法是:

urlpatterns = [
    path('', views.index, name="index"),
    path('detailed/<int:reportid>/', views.detailed, name="detailed"),
]

但是,这将允许reportid. 如果您真的将长度限制为四个字符,那么您可以将正则表达式与re_path

urlpatterns = [
    path('', views.index, name="index"),
    re_path(r'^detailed/(?P<reportid>\d{1,4})/$', views.detailed, name="detailed"),
]

另一种选择reportid.

于 2020-08-16T18:15:31.087 回答
0

在帮助理解@Alasdair 的问题后,我发现为reportid视图函数添加默认值是解决方案。

所以views.py变成了这个

def detailed(request, reportid=None):

此外,为了转到该默认值,我添加了默认视图的 url。

所以 urls.py 变成了这个

urlpatterns = [
    path('', views.index, name="index"),
    path('detailed/<int:reportid>/', views.detailed, name="detailed"),
    path('detailed/', views.detailed, name="detailed"),
]
于 2020-08-16T20:18:35.157 回答