Django:如何在通用CreateView中将URL参数传递给context_data
如何在Django CreateView中将URL参数传递给context_data?
嘿,这个问题我熟!要把URL里的jobNr参数传递给视图的context_data,只需要重写get_context_data方法,结合Django视图自带的self.kwargs字典就能轻松实现。我给你整合好代码,还附带解释:
from django.views import generic from django.urls import reverse_lazy from .forms import AddHoursForm class AddHoursView(generic.CreateView): template_name = "worktime/addhours.html" form_class = AddHoursForm success_url = reverse_lazy('worktime:myjobs') def get_form_kwargs(self): # 保留你原来的传参逻辑,这里做了完善 kwargs = super().get_form_kwargs() # URL捕获的参数会存在self.kwargs字典里 job_nr = self.kwargs.get('jobNr') if job_nr: kwargs['jobNr'] = job_nr return kwargs def get_context_data(self, **kwargs): # 先调用父类方法拿到基础context(比如表单对象) context = super().get_context_data(**kwargs) # 同样从self.kwargs里获取jobNr参数 job_nr = self.kwargs.get('jobNr') if job_nr: # 把参数添加到context,模板里就能用{{ jobNr }}直接调用 context['jobNr'] = job_nr # 如果你需要关联对应的Job对象,还可以在这里查询后传入 # 示例(记得先导入你的Job模型): # try: # context['job'] = Job.objects.get(nr=job_nr) # except Job.DoesNotExist: # context['error'] = "对应的Job不存在" return context
关键要点:
self.kwargs是Django视图专门存储URL路径中捕获参数的字典,用.get()方法获取可以避免当URL不带jobNr时抛出KeyError,完美兼容你定义的两个URL路径。- 重写
get_context_data时,必须先调用super().get_context_data(**kwargs)获取基础的context内容(比如表单对象form),再添加自定义参数。 - 之后在你的
addhours.html模板里,就可以直接用{{ jobNr }}来渲染这个参数了。
内容的提问来源于stack exchange,提问作者Mateusz Mielewczyk
相关产品推荐
相关产品推荐

