【发布时间】:2010-10-30 21:23:30
【问题描述】:
我会尽量简化这一点。假设我有以下内容:
models.py
class Person(models.Model):
name = models.CharField(max_length=255)
def getRealPerson(self):
# is there a better way to do this?
ret = None
try:
ret = self.worker
except:
try:
ret = self.retired
except:
ret = self
return ret
class Worker(Person):
salary = models.IntegerField(default=0)
class Retired(Person):
age = models.IntegerField()
这个例子对我想要什么并不重要,跟我一起去吧。这样做的目的是让我可以拥有一个主 Person 表来引用所有人。
理想情况下,我希望能够调用 Person 的视图,并为每个类类型以自定义方式列出每个特定的详细信息。我想使用自定义的包含标签来执行此操作。
people.html
{% load people_extras %}
{% for person in people %}
{% show_person person %}
{% endfor %}
people_extras.py - 模板标签
from django import template
@register.inclusion_tag('worker.html')
def show_worker(person):
return {'person':person}
@register.inclusion_tag('worker.html')
def show_retired(person):
return {'person':person}
#How do I write this function and use it as the show_person person tag?
from project.app.models import Worker, Retired
def show_person(person):
person = person.getRealPerson():
if isinstance(person, Worker):
return show_worker # yes, this doesn't work.
我不知道如何让它根据人员类型调用正确的模板。
我不知道如何通过使用 {% ifequal %} 的模板来完成此操作,如下所示:
{% ifequal person.getRealPerson.__class__.__name__ "Worker" %}
{% show_worker %}
...
我使用模板标签走了我上面写的路线。但是,我不知道在哪里放置逻辑来确定人的类型!
我认为最终我希望能够在 Person 对象上使用通用视图。
如果有更好的方法可以做到这一点,我愿意接受建议,我只想让它发挥作用。
我已经在这里卡了一天多...真的可以使用推力。
【问题讨论】:
标签: django inheritance django-models django-templates