You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:53:30