NoReverseMatch 在 /sessions/exercise/6/update/

Posted

技术标签:

【中文标题】NoReverseMatch 在 /sessions/exercise/6/update/【英文标题】:NoReverseMatch at /sessions/exercise/6/update/ 【发布时间】:2021-11-28 12:04:36 【问题描述】:

我快疯了。

根据 Django 调试器,我请求的模式没有反向匹配,但它与我在 urls.py 中的 URL 路径相同,并且我将对象 ID 作为所需参数传递。

NoReverseMatch 在 /sessions/exercise/4/update/

没有找到没有参数的“exercise_update”反向。 1 尝试的模式:['sessions/exercise/(?P[0-9]+)/update/$']

模板渲染时出错

这是我的html

<button><a href="% url 'sessions:exercise_update' exercise.id %">Update exercise</a></button>

这是我的网址路径

path('exercise/<int:pk>/update/', MyExerciseUpdate.as_view(), name='exercise_update'),

视图只是一个通用的更新视图。

class MyExerciseUpdate(LoginRequiredMixin, UpdateView):
    model = Exercise
    fields = ['my_fields']

我尝试显示exercise.id 只是为了查看它是否存在,它确实存在。怎么没有争论?

另外,我将此路径用于另一个页面中的详细视图,它工作得很好

<a href="% url 'sessions:exercise_detail' exercise.id %"> exercise.name </a>

请帮忙。

这是我的整个 urls.py 文件

from django.urls import path, include
from sessions.views import RoutineList, RoutineDetail, ExerciseDetail, SessionCreate, SessionDetail, ExerciseUpdate
from django.conf.urls.static import static
from django.conf import settings


app_name = 'sessions'

urlpatterns = [
    path('all_routines/', RoutineList.as_view(), name='routine_list'),
    path('routine/<int:pk>/', RoutineDetail.as_view(), name='routine_detail'),
    path('exercise/<int:pk>/detail', ExerciseDetail.as_view(), name='exercise_detail'),
    path('exercise/<int:pk>/update/', ExerciseUpdate.as_view(), name='exercise_update'),
    path('new/', SessionCreate.as_view(), name='session_create'),
    path('detail/<int:pk>/', SessionDetail.as_view(), name='session_detail'),
    
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

【问题讨论】:

显示你的urls.py 您的问题在您的 html 文件中:% url 'sessions:exercise_update' exercise.id %,这里 exercice.idNone 出于某种原因。 @Rvector 我添加了我的 urls.py。另外,您说executive.id 必须为None,但我在我的html 中尝试了&lt;p&gt; exercise.id &lt;/p&gt;,并且id 就在页面上。有没有其他方法可以测试 id 值? 抛出此错误的视图是什么?通常,当您要打开链接时会发生这种情况...您单击哪个链接或按钮会发生此错误? 【参考方案1】:

问题出在 form 的 html 中。表单的 url 缺少executive.id 参数,所以它抛出了无参数错误:

<form action="% url 'sessions:exercise_update' %" method="post">

解决方案:

<form action="% url 'sessions:exercise_update' exercise.id %" method="post">

现在看起来很傻,但我花了很长时间才弄清楚问题出在哪里。

【讨论】:

以上是关于NoReverseMatch 在 /sessions/exercise/6/update/的主要内容,如果未能解决你的问题,请参考以下文章

NoReverseMatch 在 /

在 Django 中使用 % url % 时的 NoReverseMatch

Django:NoReverseMatch 在

NoReverseMatch:在 Django 注册中的密码重置表单中?

下载文件页面的 NoReverseMatch 错误

django 生产服务器中的 NoReverseMatch