首页 > 解决方案 > 在 django 中使用类视图传递变量

问题描述

如何直接将类内的上下文同时传递给我的 html 页面?

该类是一个 updateView 但我也需要页面中的上下文:

class GL_PRUP(UserPassesTestMixin, LoginRequiredMixin, UpdateView):
    model = Gas_liftM
    template_name = 'Home/WELLINFO/W_lift/GL_liftUPARMTS.html'
    form_class = Gas_liftFORM  
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)
    def test_func(self):
        WeelN = self.get_object()
        GLParameters = Wcomlption.objects.filter(WellID__exact=WeelN)[0]
        print(GLParameters)
        context={'GLParameters': GLParameters,}  # need to pass this variable to my html page?
        if self.request.user== WeelN.author:
            return (True, context)
        else:
            return False

在更新 html 页面中一切正常,但无法获取 GLParameters?

{% if GLParameters %}
{{ GLParameters.WellID }} it works Tyaeb {{ GLParameters.Mndrn2 }}
{% else %}
nothing passes and happens 
{% endif %}

先感谢您

标签: djangodjango-formsdjango-viewsdjango-class-based-views

解决方案


UpdateView从多个 mixins 继承,其中之一是SingleObjectMixin继承自ContextMixin,因此您可以覆盖get_context_data方法,以便使用您需要的内容扩展上下文。

应该类似于(未经测试):

...
def get_context_data(self, **kwargs):
    context = super().context(**kwargs)
    WeelN = self.get_object()
    GLParameters = Wcomlption.objects.filter(WellID__exact=WeelN).first()
    context.update(
       {
           'GLParameters': GLParameters,
           'author': self.request.user == WeelN.author
       }
    )
    return context

推荐阅读