关于 python:Django – 从基于类的视图中访问对象字段和名称
Django - Accessing object fields and names from class-based view
我正在尝试为 Django 编写一个基于类的视图,它每次都会使用相同的模板,而不管模型如何。目的是我可以为每个模型添加一个 urls.py 条目,而不必担心视图或模板。
这将用于显示表单,并且由于表单字段名称取决于模型类型,因此需要在视图级别检查模型并提取字段名称,以便将它们传递给通用模板。然后模板根据对象的字段名称和值生成表单。
我一直在为此苦苦挣扎。目前我正在重写 get_context_data 如下
|
1
2 3 4 5 6 7 8 9 10 |
def get_context_data(self, **kwargs):
context = kwargs context_object_name = self.get_context_object_name(self.object) if context_object_name: context[context_object_name] = self.object #add some custom stuff on too tempdict = [(field, field.value_to_string(self)) for field in self.object._meta.fields] #context.update({'datafields' : tempdict}) context.update({ 'blarg': 'tester!!'}) return context |
感谢您的宝贵时间。
O
我认为你这样做是错误的。 Django 已经知道如何从模型创建表单,并且表单知道如何输出自己。因此,您可以使用
唯一困难的一点是您希望一个视图适用于多个模型。因此,与其在视图类上显式声明模型,您需要找出某种动态传递模型的方法——也许通过覆盖
相关讨论
- 感谢丹尼尔的回复。我的问题不在于它本身是一个表单(例如,我们可以假装我只想显示对象的字段和值的表格),而是我想制作一个模板正如您在第二段中提到的那样,适用于所有数据类型。我将看看覆盖
get_object 并看看我能想出什么 - 干杯! -
最终覆盖
get_object 并让它返回字典。手动添加到上下文并渲染,一切看起来都很好:) 干杯
如果您使用 django 1.3,则包含基于类的视图...只需使用它们并将 \\'template_name\\' 属性设置为您的 "common" 名称。
https://docs.djangoproject.com/en/1.3/topics/class-based-views/