如何从Django中的类方法引用模板?

时间:2013-04-08 06:08:42

标签: django django-models django-templates django-views

是否可以从Django中的类方法引用模板?假设我的模型中有以下类(对于离线扬声器系列):

class Event(models.Model): 
    name = models.CharField(max_length=300)
    date = models.DateTimeField()
    desc = models.TextField(blank=True, null=True)
    location = models.ForeignKey('Location', blank=True, null=True)
    speaker = models.ForeignKey('Speaker', blank=True, null=True)

我想使用这些属性来填充模板,并在API帖子中使用生成的HTML字符串。如何从类方法中引用HTML模板:

def create_event_html(self):
    # This is not working with or without Quotes        
    t = Template(templates/event_template.html) 

    c = Context(self)
    return t.render(c)

我想在一定条件下调用此类方法,但我不认为这与...相关...

1 个答案:

答案 0 :(得分:3)

Template(templates/event_template.html)永远不会起作用,因为它根本不是有效的Python - 它试图将(不存在的)值'templates'除以(也不存在的)对象的'html'属性'event_template'。如果你不清楚,你应该做一个介绍性的Python教程。

Template('templates/event_template.html')是有效的Python,但会查找模板文件的错误位置:模板加载器已经在“模板”下查看,因此将在'templates / templates /'中查找' event_template.html'文件。删除目录引用。

一旦完成,你会遇到另一个问题Context需要一个字典,而你正在传递self。除非您在模型类上覆盖了__getitem__,否则这将无效。您应该只传递一个带有一个条目的字典,例如{'item': self},并且在您的模板中,您可以引用item的各种属性。