【问题标题】:Custom Function in Django class based view not being overriden未覆盖基于 Django 类的视图中的自定义函数
【发布时间】: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


【解决方案1】:

您的视图代码是正确的。

您的 edit_images.html 模板很可能 POST 到 AddImages 视图,这使得它看起来好像没有调用 EditImages 视图的覆盖函数。同时只是因为触发了错误的视图。

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 2016-02-02
    • 2011-11-10
    • 2017-02-20
    • 2014-02-16
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多