Django 错误:“image_upload”的反向,没有找不到参数?
Posted
技术标签:
【中文标题】Django 错误:“image_upload”的反向,没有找不到参数?【英文标题】:Django Error: Reverse for 'image_upload' with no arguments not found? 【发布时间】:2021-03-29 13:02:55 【问题描述】:我正在尝试将主键作为 URL 参数从 CreatePost 传递到 UploadImage 视图,但即使我在 URL 中看到主键,我也会不断收到错误消息。我是 Django 的新手,所以请帮助我:) views.py
class CreatePost(CreateView):
model=shopModels.UserPost
template_name='shop/create_post.html'
fields='__all__'
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.fields['category'].widget.attrs['class'] = 'form-control'
form.fields['category'].widget.attrs['oninvalid']="this.setCustomValidity('Ovo polje je obavezno!')"
return form
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return redirect('login')
return super(CreatePost, self).dispatch(request, *args, **kwargs)
def get_success_url(self):
return reverse('image_upload',kwargs='user_post':self.object.id)
class UploadImage(CreateView):
model=shopModels.Image
template_name='shop/images_upload.html'
fields='__all__'
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return reverse('login')
return super(UploadImage, self).dispatch(request, *args, **kwargs)
urls.py ...
path('create_post/',views.CreatePost.as_view(),name="create_post"),
path('image_upload/<int:user_post>',views.UploadImage.as_view(),name="image_upload"),
...
models.py
class UserPost(models.Model):
id = models.AutoField(primary_key=True)
user=models.ForeignKey(Account,on_delete=models.CASCADE)
title=models.CharField(max_length=255)
text=models.TextField(null=True)
category=models.ForeignKey(Category,null=True,on_delete=models.SET_NULL)
is_used=models.BooleanField(default=False)
price=models.IntegerField(default=0)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title + ' | ' + str(self.user)
def get_absolute_url(self,*args,**kwargs):
return reverse('image_upload', kwargs='user_post':self.id)
class Image(models.Model):
id = models.AutoField(primary_key=True)
user_post=models.ForeignKey(UserPost,default=None, on_delete=models.CASCADE)
image=models.ImageField(null=True,blank=True,upload_to='images/')
def __str__(self):
return self.user_post.title
def get_absolute_url(self):
return reverse('index')
编辑!!!
NoReverseMatch at /image_upload/23
没有找到没有参数的“image_upload”反向。尝试了 1 种模式:['image_upload/(?P
【问题讨论】:
您帖子标题中的错误与您的代码不匹配。你能包括完整的stacktrack吗?目前,您的代码提供 kwargs 来反转,但错误表示未提供任何参数。有什么事情没有排队。 我刚刚编辑了一个帖子。我想这是一个愚蠢的问题,但我在 Django 中真的很新,真的很困惑.. 错误说没有提供任何参数,但我在 url 中看到了 id 【参考方案1】:我认为你没有在 html 表单中包含 user_post
键,你应该在 jinja 样式中包含它
<a class="btn btn-success" href="% url 'image_upload' user_post=user_post_key %">
如果你想基于user_post
做一些操作,你应该重写form_valid(self)
方法并使用self.kwargs['user_post']
访问int:user_post
。
【讨论】:
我尝试覆盖 form_valid 方法,但没有帮助。问题是我在 Jinja 模板中没有任何 标记导致该 url。它的工作原理如下:当我在 CreatePost 视图中创建帖子时,它会自动将创建的帖子的 id 传递给 UploadImage 视图(至少应该如此)。我在 url 中看到了 id,但我不明白参数发生了什么......【参考方案2】:您的路径明确期望 user_post 为整数:
path('image_upload/<int:user_post>',views.UploadImage.as_view(),name="image_upload"),
如果您调用 reverse(...) 并移交 123,您需要确保 123 是整数类型,而不是例如字符串。
【讨论】:
以上是关于Django 错误:“image_upload”的反向,没有找不到参数?的主要内容,如果未能解决你的问题,请参考以下文章