我一直在为我的 View 使用 urls.py 中的 path(...) 中提供的参数,这是一个 TemplateView
。
现在,我一直在尝试使用类似的模板执行相同的操作,但使用 CreateView
。经过一些调试后,我意识到由于某种原因,CreateView 似乎没有收到 urls.py 路径中定义的 kwargs。例如:
url.py
path('product/<int:pk>/', views.SomeViewClass.as_view(), {"foo": "bar"}, name='detail_product', ),
View .py
class SomeViewClass(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
section = kwargs["foo"]
以上工作。但是,这不会:
url.py
path('create/', views.OtherClassView.as_view(), {"foo": "bar"}, name='create'),
View .py
class OtherClassView(CreateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
section = kwargs["foo"]
有什么明显的解决方法吗?除了通过完全不同的管道找出这个参数之外?
最佳答案
.get_context_data(…)
method [Django-doc]确实没有接收 URL 参数,在这种情况下,**kwargs
是需要包含在上下文中的项目的字典。
您可以使用 self.kwargs
来访问 URL 参数:
class SomeViewClass(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
section = <b>self.kwargs['foo']</b>
关于django - CreateView 没有从 urls.py 接收 Kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67489347/