【问题标题】:NoReverseMatch Error Django - UpdateViewNoReverseMatch 错误 Django - UpdateView
【发布时间】:2017-07-27 17:54:42
【问题描述】:

我有一个视图,用户可以创建/更新他们的帖子。但是,当用户完成编辑后,我希望他们返回帖子(摘要)。但是,某处有一个我找不到的错误。关于问题可能是什么的任何想法?

错误:1) 未找到带有参数“()”和关键字参数“{'id': 2}”的“aircraftdetail”的反向。尝试了 0 个模式:[]

2) 返回 HttpResponseRedirect(instance.get_absolute_url())

3) return reverse('aircraftdetail', kwargs={"id": self.id})

views.py

def AircraftUpdate(request, id=None):
    instance = get_object_or_404(Aircraft, id=id)
    form = AircraftForm(request.POST or None, instance=instance)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        return HttpResponseRedirect(instance.get_absolute_url())
    context={"aircraft":instance, "form":form}
    return render(request,'aircraft_form.html',context)

Models.py

class Aircraft(models.Model):
    title = models.CharField(max_length=50, default="")
    image = models.ImageField(upload_to = 'static/image_upload', blank=True)
    cost = models.DecimalField(max_digits=8, decimal_places=3)

def get_absolute_url(self):
        return reverse('aircraftdetail', kwargs={"id": self.id})

Urls.py - 飞机

urlpatterns = [
  url(r'^detail/(?P<id>\d+)/$', views.AircraftDetail, name='AircraftDetail'),
  url(r'^detail/(?P<id>\d+)/edit/$', views.AircraftUpdate, name='AircraftEdit'),
  url(r'^$', views.AircrafList, name='aircraft'),]

Urls.py AviationSite(主)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'aircraft/', include('aircraft.urls')),
    url(r'^login/', login_view, name="login"),
    url(r'^logout/', logout_view, name="logout"),
    url(r'^register/', register_view, name="register"),
    url(r'^aircraft/create/$', AircraftCreate),]

【问题讨论】:

  • 在 Python 中,推荐的做法是调用您的视图函数aircraft_update。使用AircraftUpdate 使其对于其他 Django 用户来说看起来像是基于类的视图。

标签: django


【解决方案1】:

您的 URL 模式有 `name='AircraftDetail'(大写的 'A' 和 'D'):

url(r'^detail/(?P<id>\d+)/$', views.AircraftDetail, name='AircraftDetail'),

这与您调用reverseaircraftdetail(全部小写)不匹配:

return reverse('aircraftdetail', kwargs={"id": self.id})

更改其中一个以使它们匹配(全小写在 Django 中更常见)。

【讨论】:

  • 我现在真的觉得自己很愚蠢。非常感谢您指出这个小错误哈哈
猜你喜欢
  • 2020-02-27
  • 2018-02-19
  • 2015-10-24
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多