gpt4 book ai didi

django:使用通用 View 类将额外参数传递给模板

转载 作者:行者123 更新时间:2023-12-02 08:47:17 24 4
gpt4 key购买 nike

我想使用相同的模板在 django 中使用通用类查看器显示来自不同模型的记录。通用类查看器已经接受了模板中所需的大部分参数,一个除外。

如何将上下文中的这个额外参数传递给模板?

我曾尝试将其作为 urlconf 中的第三个(额外)参数传递,但没有成功:

# in urlconf.py
url(r'^processador/(?P<pk>[\w-]+)/$',
UpdateView.as_view(
model=Processador,
template_name='model_form.html',
success_url=reverse_lazy('processador-list'),
),
{'extrainfo': "Processador"},
name='processador-detail'
),

url(r'^software/(?P<pk>[\w-]+)/$',
UpdateView.as_view(
model=Software,
template_name='model_form.html',
success_url=reverse_lazy('software-list'),
),
{'extrainfo': "Software"},
name='software-detail'
),

在我的应用程序中会有几个像这样的 urlconf。

一种可能性是对 View 类进行子类化,并提供我自己的 get_context_data 方法实现,该方法添加所需的键值对。

但是这个解决方案过于重复,因为它会应用于 View 类的每次使用。

也许只做一个 View 类的子类是可能的。这个新类中的 as_view 类方法将接受一个新的命名参数,该参数将在 get_context_data 的重新定义中进入上下文。

我在 django 和 Python 方面经验不足,所以我不确定如何完成此任务,我正在接受帮助。

最佳答案

我认为您可以只使用 UpdateView 的一个子类来完成此操作,而不是我认为您认为您需要的每个模型一个。

as_view 的参数被设置为返回对象的属性,所以我认为你可以这样做

class MyUpdateView(UpdateView):
extrainfo = None

def get_context_data(self, **kwargs):
context = super(MyUpdateView, self).get_context_data(self, **kwargs)
context['extrainfo'] = self.extrainfo

return context

然后在你的 urlconf 中这样调用它

url(r'^processador/(?P<pk>[\w-]+)/$',
MyUpdateView.as_view(
model=Processador,
template_name='model_form.html',
success_url=reverse_lazy('processador-list'),
extrainfo="Processador"
),
name='processador-detail'
)

不过,我完全不确定您是否应该这样做 - urls.py 中的内容越来越多。

关于django:使用通用 View 类将额外参数传递给模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11588743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com