簡體   English   中英

如何使用Django中基於類的視圖從models.py調用函數?

[英]How to call a function from models.py with class based views in Django?

我想使用models.py 中的函數/方法將用戶上傳的.docx 文件轉換為.html。 我可以使用這種方法使用基於函數的視圖來做到這一點:

模型.py:

class Article(models.Model):
    main_file = models.FileField(upload_to="files")
    slug = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    @classmethod
    def convert_word(self, slug):
        import pypandoc
        pypandoc.convert_file('media/files/%s.docx' %slug, 'html', outputfile="media/files/%s.html" %slug)

然后我在views.py中像這樣調用convert_word函數:

def submission_conf_view(request, slug):
    Article.convert_word(slug)
    return redirect('submission:article_list')

我想做的是調用相同的函數/方法,但使用 Django 的基於類的視圖,但我無法弄清楚。

您可以使用基本View並覆蓋get方法。

from django.views import View

class MyView(view):
    def get(self, request, *args, **kwargs):
        Article.convert_word(self.kwargs['slug'])
        return redirect('submission:article_list')

或者由於您的視圖總是重定向,您可以使用RedirectView

class MyView(RedirectView):

    permanent = False
    pattern_name = 'submission:article_list'  # the pattern to redirect to

    def get_redirect_url(self, *args, **kwargs):
        # call the model method
        Article.convert_word(self.kwargs['slug'])
        # call super() to return a redirect
        return super().get_redirect_url(*args, **kwargs)

但是,使用其中任何一個都沒有真正的優勢。 我認為您當前的三行方法更具可讀性。

有關更多信息,請參閱有關基於類的視圖RedirectView 的介紹的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM