4

我有一个使用FormView的类视图。我需要更改表单的名称,即这是我旧函数视图中的名称:

 upload_form = ContactUploadForm(request.user)
 context = {'upload': upload_form,}

使用我的新视图,我假设我可以使用 get_context_data 方法重命名,但不确定如何。

如何重命名此表单以上传而不是表单,因为我的模板{{ upload }}不使用{{ form }}?谢谢。

当前班级视图:

class ImportFromFile(FormView):

    template_name = 'contacts/import_file.html'
    form_class = ContactUploadForm

    def get_context_data(self, **kwargs):
        """
        Get the context for this view.
        """
        # Call the base implementation first to get a context.
        context = super(ImportFromFile, self).get_context_data(**kwargs)

        return context
4

2 回答 2

9

尝试这个:

class ImportFromFile(FormView):

    template_name = 'contacts/import_file.html'
    form_class = ContactUploadForm

    def get_context_data(self, **kwargs):
        """
        Get the context for this view.
        """
        kwargs['upload'] = kwargs.pop('form')
        return super(ImportFromFile, self).get_context_data(**kwargs)
于 2013-06-24T10:07:51.380 回答
3

Django 2.0+ 支持更改上下文对象名称。请参阅:内置的基于类的通用视图

制作“友好”的模板上下文

您可能已经注意到我们的示例发布者列表模板将所有发布者存储在名为 object_list 的变量中。虽然这很好用,但对模板作者来说并不是那么“友好”:他们必须“只知道”他们正在与这里的发布者打交道。

好吧,如果您正在处理模型对象,那么这已经为您完成了。当您处理对象或查询集时,Django 能够使用模型类名称的小写版本填充上下文。这是在默认 object_list 条目之外提供的,但包含完全相同的数据,即 publisher_list。

如果这仍然不是一个很好的匹配,您可以手动设置上下文变量的名称。通用视图上的context_object_name属性指定要使用的上下文变量:

class PublisherList(ListView):
    model = Publisher
    context_object_name = 'choose the name you want here'
于 2019-09-04T21:50:12.413 回答