我想使用models.py中的函数/方法将用户上传的.docx文件转换为.html。我可以通过这种方法使用基于函数的视图来完成它:
models.朋友:
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)
然而,使用其中任何一种都没有真正的优势。我认为你目前的三行方法更具可读性。
有关更多信息,请参阅有关an introduction to class based views或RedirectView
的文档。