我正在尝试为Django编写一个基于类的视图,每次都使用相同的模板,无论模型如何。目的是我可以为每个模型添加一个urls.py条目,而不必担心视图或模板。
这将用于显示表单,并且由于表单字段名称取决于模型类型,因此需要检查模型并在视图级别提取字段名称,以便将它们传递给通用模板。然后,模板根据对象的字段名称和值生成表单。
我一直在努力解决这个问题。目前我正在努力覆盖get_context_data,如下所示
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
self.object._meta.fields
位是我讨论问题的地方。我无法理解如何访问当前模型。我在一个视图中这样做,我在混音中有更多的运气吗?
感谢您的时间。
0
答案 0 :(得分:0)
如果您使用的是django 1.3,则会包含基于类的视图...只需使用它们并将'template_name'属性设置为您的“常用”名称。
https://docs.djangoproject.com/en/1.3/topics/class-based-views/
答案 1 :(得分:0)
我认为你这是错误的做法。 Django已经知道如何从模型创建表单,表单知道如何输出自己。因此,您可以使用ModelFormMixin
创建标准通用视图,无需为了获取模型字段的表单字段而做任何聪明的事情。
唯一困难的是您希望一个视图适用于多个模型。因此,不是在视图类上明确声明模型,而是需要通过某种方式动态传递它 - 可能是通过覆盖get_object
。