NoReverseMatch django类为基础 [英] NoReverseMatch django class based
问题描述
编辑。
抱歉,我很难过,感谢您的帮助,我该如何做?
模型
created_by = models.ForeignKey(User)
def get_absolute_url(self):
return reverse('author_update',kwargs = {'pk':self.pk,'user_id':self.created_by} )
可能与错误相关使用基于django类的视图键入错误
我收到此错误
NoReverseMatch at / author / add / 4
使用参数'()'和关键字arguments'{ }' 未找到。尝试1个模式:['author / add /(?P< user_id> \\d +)$']
urls.py
url(r'^ author / add /(?P< user_id& \\ d +)$',AuthorCreate.as_view(),name ='author_add'),
url(r'^ author /(?P< user_id> \d +)/(?P< pk& )$',AuthorUpdate.as_view(),name ='author_update'),
url(r'^ author /(?P< user_id> \d +)/(?P< pk> \d + delete / $',AuthorDelete.as_view(),name ='author_delete'),
url(r'^ author / list /(?P< user_id> \d +)$',AuthorList.as_view name ='author_list'),
views.py for createview
class AuthorCreate(LoginRequiredMixin,CreateView):
model =作者
fields = ['firstName','lastName',]
template_name ='authorCreate.html'
success_url = reverse_lazy('author_list')
def form_valid(self,form):
form.i nstance.created_by = self.request.user
return super(AuthorCreate,self).form_valid(form)
def get_context_data(self,** kwargs):
context = super (authorCreate,self).get_context_data(** kwargs)
如果int(self.kwargs ['user_id'])!= self.request.user.id:
raise PermissionDenied
返回上下文
views.py for listview
class AuthorList(LoginRequiredMixin,ListView):
template_name ='authorList.html'
queryset = Author.objects.all()
def get_context_data (self,** kwargs):
context = super(AuthorList,self).get_context_data(** kwargs)
if int(self.kwargs ['user_id'])!= self.request.user .id:
raise PermissionDenied
return context
authorCreate.html
< form method =post> {%csrf_token%}
{{form.as _p}}
< input type =submitvalue =提交/>
< / form>
authorList.html
{{request.user.username}}
< ul>
{%object_list%}中的作者
< li> {{author.firstName}}
< a href ={%urlauthor_updateauthor.id%}> ; {{author.firstName}}< / a>
< a href ={%urlauthor_deleteauthor.id%}> delete< / a>
< / li>
{%endfor%}
< / ul>
终端错误
code>内部服务器错误:/ author / add / 4
追溯(最近的最后一次呼叫):
文件/ home / ronald / best / A2 / 0124 / local / lib / python2。 7 / site-packages / django / core / handlers / base.py,第114行,在get_response
response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件/ home / ronald / best / A2 / 0124 / local / lib / python2.7 / site-packages / django / views / generic / base.py,第69行,视图
return self.dispatch(request,* args,** kwargs)
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/utils/decorators.py,第29行,_wrapper
返回bound_func(* args,** kwargs)
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py,行22,in _wrapped_view
return view_func(request,* args,** kwargs)
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django /utils/decorators.py,lin e 25,in bound_func
return func(self,* args2,** kwargs2)
文件/home/ronald/best/A2/0124/vort/larb/views.py,第52行,在调度
返回超级(LoginRequiredMixin,self).dispatch(request,* args,** kwargs)
文件/home/ronald/best/A2/0124/local/lib/python2.7/
返回处理程序(request,* args,** kwargs)
文件/ home / ronald / best / A2 /0124/local/lib/python2.7/site-packages/django/views/generic/edit.py,第205行,post
return super(BaseCreateView,self).post(request,* args, ** kwargs)
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/edit.py,第171行,在帖子
return self.form_valid(form)
文件/home/ronald/best/A2/0124/vort/larb/views.py,第82行,form_valid
return super(AuthorCreate, self).form_valid(form)
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/ed it.py,第148行,form_valid
返回超级(ModelFormMixin,self).form_valid(form)
文件/home/ronald/best/A2/0124/local/lib/python2.7 /site/packages/django/views/generic/edit.py,第78行,form_valid
return HttpResponseRedirect(self.get_success_url())
文件/ home / ronald / best / A2 / 0124 /local/lib/python2.7/site-packages/django/views/generic/edit.py,第132行,get_success_url
如果self.success_url:
文件/ home / ronald / best /A2/0124/local/lib/python2.7/site-packages/django/utils/functional.py,第125行,__wrapper__
res = func(* self .__ args,** self .__ kw)
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/core/urlresolvers.py,第509行,反向
return iri_to_uri( resolver._reverse_with_prefix(view,prefix,* args,** kwargs))
文件/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/core/urlresolvers .py,第429行,在_reverse_with_prefix
(lookup_view_s,args,k wargs,len(pattern),patterns))
NoReverseMatch:反向为'author_add'与参数'()'和关键字参数'{}'未找到。尝试1个模式:['author / add /(?P< user_id> \\d +)$']
问题是 success_url = reverse_lazy('author_list')
将带你回到'author_list '成功后查看,但为了返回'author_list',您需要为'user_id'字段提供一个参数,因为在您的urls.py中有:
url(r'^ author / list /(?P< user_id> \d +)$',AuthorList.as_view(),name ='author_list'),
修改:
success_url
字段并输入以下内容:
class AuthorCreate(LoginRequiredMixin,创建视图)
/ pre>
model =作者
fields = ['firstName','lastName',]
template_name ='authorCreate.html'
def get_success_url(self) :
return reverse_lazy('author_list',kwarg s = {'user_id':self.request.user.id})
def form_valid(self,form):
form.instance.created_by = self.request.user
return super(AuthorCreate,self).form_valid(form)
def get_context_data(self,** kwargs):
context = super(AuthorCreate,self).get_context_data(** kwargs)
如果int(self.kwargs ['user_id'])!= self.request.user.id:
raise PermissionDenied
return context
edit.
sorry I'm having a hard time and thanks for your help how do I do that?
model
created_by = models.ForeignKey(User) def get_absolute_url(self): return reverse('author_update', kwargs={'pk': self.pk, 'user_id': self.created_by})
Could be related to the error Type error with django class based view
I get this error
NoReverseMatch at /author/add/4 Reverse for 'author_add' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['author/add/(?P<user_id>\\d+)$']
urls.py
url(r'^author/add/(?P<user_id>\d+)$', AuthorCreate.as_view(), name='author_add'), url(r'^author/(?P<user_id>\d+)/(?P<pk>\d+)$', AuthorUpdate.as_view(), name='author_update'), url(r'^author/(?P<user_id>\d+)/(?P<pk>\d+)/delete/$', AuthorDelete.as_view(), name='author_delete'), url(r'^author/list/(?P<user_id>\d+)$', AuthorList.as_view(), name='author_list'),
views.py for createview
class AuthorCreate(LoginRequiredMixin, CreateView): model = Author fields = [ 'firstName', 'lastName', ] template_name = 'authorCreate.html' success_url = reverse_lazy('author_list') def form_valid(self, form): form.instance.created_by = self.request.user return super(AuthorCreate, self).form_valid(form) def get_context_data(self, **kwargs): context = super(AuthorCreate, self).get_context_data(**kwargs) if int(self.kwargs['user_id']) != self.request.user.id: raise PermissionDenied return context
views.py for listview
class AuthorList(LoginRequiredMixin, ListView): template_name = 'authorList.html' queryset = Author.objects.all() def get_context_data(self, **kwargs): context = super(AuthorList, self).get_context_data(**kwargs) if int(self.kwargs['user_id']) != self.request.user.id: raise PermissionDenied return context
authorCreate.html
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Submit" /> </form>
authorList.html
{{ request.user.username}} <ul> {% for author in object_list %} <li>{{ author.firstName }} <a href="{% url "author_update" author.id %}">{{ author.firstName }}</a> <a href="{% url "author_delete" author.id %}">delete</a> </li> {% endfor %} </ul>
terminal error
Internal Server Error: /author/add/4 Traceback (most recent call last): File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/utils/decorators.py", line 29, in _wrapper return bound_func(*args, **kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view return view_func(request, *args, **kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in bound_func return func(self, *args2, **kwargs2) File "/home/ronald/best/A2/0124/vort/larb/views.py", line 52, in dispatch return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/base.py", line 87, in dispatch return handler(request, *args, **kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 205, in post return super(BaseCreateView, self).post(request, *args, **kwargs) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 171, in post return self.form_valid(form) File "/home/ronald/best/A2/0124/vort/larb/views.py", line 82, in form_valid return super(AuthorCreate, self).form_valid(form) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 148, in form_valid return super(ModelFormMixin, self).form_valid(form) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 78, in form_valid return HttpResponseRedirect(self.get_success_url()) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 132, in get_success_url if self.success_url: File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/utils/functional.py", line 125, in __wrapper__ res = func(*self.__args, **self.__kw) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 509, in reverse return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "/home/ronald/best/A2/0124/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 429, in _reverse_with_prefix (lookup_view_s, args, kwargs, len(patterns), patterns)) NoReverseMatch: Reverse for 'author_add' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['author/add/(?P<user_id>\\d+)$']
解决方案The problem is that
success_url = reverse_lazy('author_list')
will take you back to the 'author_list' view after success, but in order to go back to 'author_list', you need to provide an argument to the 'user_id' field because in your urls.py you have:url(r'^author/list/(?P<user_id>\d+)$', AuthorList.as_view(), name='author_list'),
Edit:
remove the
success_url
field and input the following:class AuthorCreate(LoginRequiredMixin, CreateView): model = Author fields = [ 'firstName', 'lastName', ] template_name = 'authorCreate.html' def get_success_url(self): return reverse_lazy('author_list', kwargs={'user_id': self.request.user.id}) def form_valid(self, form): form.instance.created_by = self.request.user return super(AuthorCreate, self).form_valid(form) def get_context_data(self, **kwargs): context = super(AuthorCreate, self).get_context_data(**kwargs) if int(self.kwargs['user_id']) != self.request.user.id: raise PermissionDenied return context
这篇关于NoReverseMatch django类为基础的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!