Django view.py调用函数报错:VacanciesView调用get_context_data提示self未定义
问题解决:name 'self' is not defined 错误
错误根源
你写的VacanciesView是函数视图,但get_context_data是Django基于类的视图(CBV)的专属方法——函数视图里不存在self这个实例对象,同时你把get_context_data写成了独立函数,既不属于类的方法,也没法通过super()调用父类逻辑,所以触发报错。
两种可行解决方案
方案一:改为基于类的视图(推荐)
把VacanciesView改成继承TemplateView的类视图,让get_context_data成为类的方法,就能正常使用self和父类方法:
from django.views.generic import TemplateView from .models import Navigate # 假设你的get_vacancies函数已实现 def get_vacancies(): pass class VacanciesView(TemplateView): template_name = 'main/vacancies.html' def get_context_data(self, **kwargs): # 获取父类的基础上下文 context = super().get_context_data(**kwargs) # 添加导航数据 context['navigate_results'] = Navigate.objects.all() # 添加排序后的职位数据 context['vacancies'] = sorted(get_vacancies(), key=lambda item: item["published_at"][:10]) return context
方案二:保留函数视图,直接合并上下文
如果不想切换到类视图,直接在函数里处理所有需要传递给模板的变量即可:
from django.shortcuts import render from .models import Navigate def get_vacancies(): pass def VacanciesView(request): navigate_results = Navigate.objects.all() # 处理职位排序逻辑 vacancies = sorted(get_vacancies(), key=lambda item: item["published_at"][:10]) # 合并所有上下文变量 context_vac = { 'navigate_results': navigate_results, 'vacancies': vacancies } return render(request, 'main/vacancies.html', context_vac)
内容的提问来源于stack exchange,提问作者Proger228
相关产品推荐
相关产品推荐

