Я попытаюсь упростить это как можно больше. Допустим, у меня есть следующие:Наследование модели Django с пользовательским включением_tags
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 и иметь каждую конкретную информацию, указанную в индивидуальном порядке для каждого типа класса. Для этого я хотел бы использовать настраиваемый include_tag.
people.html{% load people_extras %}
{% for person in people %}
{% show_person person %}
{% endfor %}
people_extras.py - templatetags
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 %}
...
Я пошел маршрут, который я написал выше с templatetags. Тем не менее, я не знаю, где поставить логику, чтобы определить тип человека!
Я думаю, что в конечном итоге я хотел бы иметь возможность использовать общий вид для этого также и для объекта Person.
Если есть намного лучший способ сделать это, я открыт для предложений, я просто хочу заставить его работать.
Я уже давно застрял здесь в течение дня ... мог действительно использовать толчок.
I 'немного запутался в реализации пользовательского шаблона. testperson.cast() возвращает правильный под-объект, но как я могу использовать его при вызове правильного include_tag. То, как я устанавливал это выше, show_person не может быть вызван (он не зарегистрирован). – lostincode
Вот что я обратился во втором абзаце. Отредактировано, надеюсь, сделать его более ясным. –