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.id
是 None
出于某种原因。
@Rvector 我添加了我的 urls.py。另外,您说executive.id 必须为None,但我在我的html 中尝试了<p> exercise.id </p>
,并且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/的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中使用 % url % 时的 NoReverseMatch