即使我的“Identity_nest_list”统一资源定位器包含 pk 参数,也会出现 NoReverseMatch 错误
Posted
技术标签:
【中文标题】即使我的“Identity_nest_list”统一资源定位器包含 pk 参数,也会出现 NoReverseMatch 错误【英文标题】:Getting a NoReverseMatch error even though my 'Identity_nest_list' uniform resource locator contains the pk parameter 【发布时间】:2017-10-22 01:50:08 【问题描述】:我正在尝试更新一个实例并返回到该实例的模板视图。
问题:代码呈现编辑视图,但是当我编辑实例并按保存时,它会返回此错误。我意识到错误告诉我我的Identity_nest_list
URL 没有 pk 参数。但是我添加了它,它仍然给我错误。
基本上我希望能够编辑对象,保存编辑并将用户重定向到 Identity_unique 实例的更新版本,以及已经存在的其他实例
Request Method: POST
Request URL: http://127.0.0.1:8000/nesting/Identity-edit/L882394/?csrfmiddlewaretoken=umHqs06uQmn0fsBNPjnqpuv4yyBIPkGGJNmN1l83TLUSVFh3ja1WPd8reE3IvSEX
Django Version: 1.10.5
Python Version: 3.5.3
Installed Applications:
['Identities',
'nesting',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'widget_tweaks']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'Identity.middleware.LoginRequiredMiddleware']
Traceback:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch
88. return handler(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/edit.py" in post
240. return super(BaseUpdateView, self).post(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/edit.py" in post
183. return self.form_valid(form)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/edit.py" in form_valid
163. return super(ModelFormMixin, self).form_valid(form)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/edit.py" in form_valid
79. return HttpResponseRedirect(self.get_success_url())
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/views/generic/edit.py" in get_success_url
147. if self.success_url:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/functional.py" in __wrapper__
111. res = func(*self.__args, **self.__kw)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/urls/base.py" in reverse
91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/urls/resolvers.py" in _reverse_with_prefix
392. (lookup_view_s, args, kwargs, len(patterns), patterns)
Exception Type: NoReverseMatch at /nesting/Identity-edit/L882394/
Exception Value: Reverse for 'Identity_nest_list' with arguments '()' and keyword arguments '' not found. 0 pattern(s) tried: []
代码如下:
views.py
from django.shortcuts import render, redirect
from django.views.generic import TemplateView, UpdateView
from nesting.forms import Identity_Form, Symptom_Form
from nesting.models import Identity_unique, Symptom_relation
from django.core.urlresolvers import reverse_lazy
class Identity_view(TemplateView):
template_name = 'nesting/nesting.html'
def get(self, request):
form = Identity_Form()
Identities = Identity_unique.objects.filter(user = request.user)
var = 'form': form, 'Identities': Identities
return render(request, self.template_name, var)
def post(self, request):
form = Identity_Form(request.POST)
content = None
if form.is_valid():
NIS = form.save(commit = False)
NIS.user = request.user
NIS.save()
content = form.cleaned_data['NIS']
form = Identity_Form()
return redirect('nesting:nesting')
var = 'form': form, 'content': content
return render(request,self.template_name, var)
class Identity_nest_list_view(TemplateView):
model = Identity_unique
template_name = 'nesting/Identity_nest.html'
def get(self, request):
form = Identity_Form()
Identities = Identity_unique.objects.filter(user = request.user).order_by('-Timestamp')
var = 'form':form, 'Identities': Identities
return render(request, self.template_name, var)
class Identity_unique_Update(UpdateView):
model = Identity_unique
fields = [ 'first_Name', 'last_Name', 'location', 'date_of_birth', 'contact',]
success_url = reverse_lazy('Identity_nest_list')
urls.py
from django.conf.urls import url
from nesting.views import Identity_view, Identity_nest_list_view, Symptoms_document_view, Medical_History_nest_view, Identity_unique_Update
from . import views
urlpatterns = [
url(r'^$', Identity_view.as_view(), name = 'nesting'),
url(r'^Identity-nest/(?P<pk>\w+)/$', Identity_nest_list_view.as_view(), name = 'Identity_nest_list'),
url(r'^Symptoms-document/(?P<pk>\w+)/$', Symptoms_document_view.as_view(), name = 'Symptoms_nest_list'),
url(r'^Symptom-view/(?P<pk>\w+)/$', Medical_History_nest_view.as_view(), name = 'Medical_History_nest'),
url(r'^Identity-edit/(?P<pk>\w+)/$', Identity_unique_Update.as_view(), name = 'Identity_unique_view_update')
]
Identity_nest.html
% extends 'base.html' %
<!DOCTYPE html>
<html>
% block head %
<head>
<meta charset="utf-8">
<title>See patient</title>
</head>
% endblock %
<body>
% block body %
<div class = "row" style = "margin-top: 80px;">
<div class="col-sm" >
<nav class =" " >
<ul class = "nav flex-column">
<li class = "nav-item"><a class = "nav-link" href = "% url 'nesting:nesting'%" ><small>Create Identity </small></a></li>
<li class = "nav-item"><a class = "nav-link" href = "#"><small>Move to Trash</small> </a></li>
</ul>
</nav>
</div>
<div class = "col-sm" >
% for Identity in Identities %
<div class = "card " style = "margin-top: 20px;" >
<ul class = "list-group list-group-flush">
<li class = "list-group-item"> <small class = "text-muted">Created On : Identity.Timestamp</small></li>
<li class = "list-group-item"><a class = "nav-link" href = "% url 'nesting:Medical_History_nest' Identity.pk %" >Identity.first_Name Identity.last_Name </a> <p>NIS: Identity.NIS </p></li>
<li class = "list-group-item"><p> <small>Contact: Identity.contact</small></p></a></li>
<li class = "list-group-item"><p> <small>Birthday: Identity.date_of_birth</small></p></a></li>
<li class = "list-group-item"><a class = "nav-link" href = "%url 'nesting:Symptoms_nest_list' Identity.pk %" ><small>Create Medical State </small></a></li>
<li class = "list-group-item"><a class = "nav-link" href = "%url 'nesting:Identity_unique_view_update' Identity.pk %" ><small>Update</small></a></li>
</ul>
</div>
% endfor %
</div>
<div class="col-sm" ></div>
</div>
% endblock %
</body>
</html>
Identity_unique_form.html
% extends 'base.html' %
% load widget_tweaks %
<html>
<head>
% block head %
<title>Update</title>
% endblock %
</head>
<body>
% block body %
<style media="screen">
#navigation
margin-top: 90px;
</style>
<div class = "container">
<div class = "row">
<nav class="col-md-3" style=" margin-top: 90px;">
<ul class = "nav flex-column">
<li class = "nav-item"> <a class = "nav-link" href = "% url 'nesting:nesting'%"><small>Create Identity</small> </a></li>
<li class = "nav-item"><a class = "nav-link" href = "% url 'nesting:Identity_nest_list'%" ><small>See Identity </small></a></li>
</ul>
</nav>
<main class = "col-md-7" style=" margin-top: 180px;">
<form method = 'post' novalidate>
% csrf_token %
% if form.non_field_errors %
<div class="alert alert-danger" role="alert">
% for error in form.non_field_errors %
error
% endfor %
</div>
% endif %
<div class = "form-row">
<div class = "form-group col-md-6">
form.NIS.errors
form.NIS
</div>
<div class = "form-group col-md-6">
form.contact.errors
form.contact
</div>
</div>
<div class = "form-row">
<div class = "form-group col-md-6">
form.first_Name.errors
form.first_Name
</div>
<div class = "form-group col-md-6">
form.last_Name.errors
form.last_Name
</div>
</div>
<div class = "form-row">
<div class = "form-group col-md-6">
form.location.errors
form.location
</div>
<div class = "form-group col-md-6">
form.date_of_birth.errors
form.date_of_birth
</div>
</div>
<button class = "btn-primary btn-large btn ">Submit</button>
</form>
</div>
</main>
</div>
% endblock %
</body>
</html>
【问题讨论】:
【参考方案1】:Identity_unique_Update成功url不包含pk:
success_url = reverse_lazy('Identity_nest_list')
改成:
def get_success_url(self):
return reverse('nesting:Identity_nest_list', kwargs='pk': self.object.pk)
【讨论】:
XXX是什么意思? 意思是self.object.pk 我要导入self
,因为我收到此错误NameError: name 'self' is not defined
我进行了编辑,但每次我尝试提交编辑时,它都会给我NoReverseMatch at /nesting/Identity-edit/L882394/ Reverse for 'Identity_nest_list' with arguments '()' and keyword arguments ''pk': 'L882394'' not found. 0 pattern(s) tried: []
如果你有兴趣,这是我的公共回购:github.com/iivri/Nesting/tree/master/Identity
你使用命名空间吗?以上是关于即使我的“Identity_nest_list”统一资源定位器包含 pk 参数,也会出现 NoReverseMatch 错误的主要内容,如果未能解决你的问题,请参考以下文章
首次承认!美副总统:新冠测试工具不足!美国又现恐怖游轮,2500人被困!