python - 如何为多个文件上传创建基于类的视图
问题描述
我正在上传多个文件,我想在 , 和 中使用类,models.py
这样forms.py
我views.py
的代码就可以在一个地方轻松更改并重用。
我遇到的问题是不了解如何为文件上传实现基于类的视图,该视图允许我创建实例以供重用。
我试图实现一个基于类的视图,如下所示,但我相信我需要插入一个init方法并插入self.
属性,但我很困惑,因为属性中有诸如此类的功能reverse_lazy
。
我的观点.py
class FileUploadView(View):
form_class = DocumentForm
success_url = reverse_lazy('home') # want different url for every instance
template_name = 'file_upload.html' # same for template_name
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect(self.success_url)
else:
return render(request, self.template_name, {'form': form})
编辑:正如 Gasanov 所建议的,您可以将success_url
andtemplate_name
作为参数插入url_patterns
如下:
urlpatterns = [
path('stylist/', payroll_views.FileUploadView.as_view(
success_url=reverse_lazy('landing.html'), template_name='stylist.html'), name='stylist'),
]
这允许以干净实用的方式重用基于类的视图。
解决方案
看起来你可以从使用FormView
而不是受益View
,因为你基本上是post
从那里重新实现。
为了“覆盖” success_url
and template_name
,已经有一些方法可以做到这一点:
class FileUploadView(FormView):
...
def get_success_url(self):
if blahblah:
return something
else:
return something_else
def get_template_names(self):
if blahblah:
return ['some/template.html']
else:
return ['another/template.html']
推荐阅读
- python-3.x - Googletrans 引发错误:json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
- vb.net - 将数据粘贴到 DataGridView vb.net
- sql - FORMAT([Time], 'hh:mm') 返回 NULL
- reactjs - 动态插件 redux-form
- collections - 在 BluePrism 中手动构建集合
- visual-studio - 我需要为 UWP 购买哪个证书?
- django - 无法使用 Apache 和 mod_Wsgi 将 Django 运行到产品中
- uwp - 从“设置”更改文本大小时,UWP 应用无法正确缩放
- javascript - 如何使用脚本标签在 Shopify 商店中创建浮动小部件
- elasticsearch - 如何过滤给定范围的弹性搜索结果?