【发布时间】:2019-02-12 15:22:03
【问题描述】:
我有一个父视图和一个子视图。我想在子视图中覆盖一个自定义函数,如下所示:
我的网址:
path('<int:place_id>/add_images/', AddImages.as_view(), name="add-images"),
path('<int:place_id>/edit/images/', EditImages.as_view(), name="edit-images"),
# PARENT:
class AddImages(LoginRequiredMixin, View):
template_name = images/add_images.html
# HERE I GET THE CURRENT URL:
def next_url(self):
next_url = "?next={0}".format(self.request.path)
print("NEXT URL:" + str(next_url))
return next_url
# AND I USE IT HERE:
def post(self, request, **kwargs):
# ...
next_url = self.next_url()
data = {'next_url' : next_url }
return JsonResponse(data)
# CHILD:
class EditImages(AddImages):
"""
Inherits from ImagesView. overwrites template and next_url
"""
template_name = "images/edit_images.html"
def next_url(self):
next_url = "?next={0}".format(self.request.path)
print("CHILD URL2:" + str(next_url))
return next_url
我想覆盖父视图 next_url 并将其传递给 post()
目前输出只打印:“NEXT URL: ...”
我该如何解决这个问题? 提前致谢
【问题讨论】:
-
您能否再次检查您的 URL 配置是否指向正确的视图?因为代码看起来不错,所以我认为其他地方可能有问题。
-
@malberts 我已经编辑了我的答案并包含了网址
-
帮助调试:将你父类中的代码复制到子类中,不要扩展父类。然后打印出不同的消息。我只是想确认它实际上正在正确加载类。
-
我认为它确实如此,因为 template_name = ... 确实加载了另一个模板@malberts
-
我还有一件事要尝试。查看您的模板是否发布到正确的操作。我认为
edit_images.html可能会不小心提交到添加视图。
标签: python django django-views django-class-based-views django-inheritance