【问题标题】:How can I convert a python object to string using the context?如何使用上下文将 python 对象转换为字符串?
【发布时间】:2017-08-02 01:08:43
【问题描述】:

我正在尝试以表单的方式在 django 模板中呈现对象实例。因此,在视图的某处创建了一个对象实例:my_object = MyObject(),并在上下文中传递给模板:context['my_object'] = my_object

处理模板时,调用MyObject__str__() 方法创建一个待填充的字符串。对于MyObject,它看起来像这样:

def __str__(self):
    """ Render template """
    return mark_safe(
        render_to_string(self.template, {'options': self.options})
    )

由于对象的模板想使用 sekizai 向 CSS 和 JS 块添加代码,我需要渲染上下文。有没有办法(例如,使用不同的方法)来获取这个上下文?

【问题讨论】:

    标签: django django-templates django-sekizai


    【解决方案1】:

    恐怕这是不可能的,而且它不是 Django 的方式

    我会这样做:

    1. 声明一个模板(命名为mymodel_repr.html)。
    2. 在里面写下我想要的渲染方式。
    3. 将其存储在其他模板中(也可以在应用程序的templates/ 文件夹中)。
    4. 更改 __str__(self) 以返回 required 字段或其他内容。
    5. 现在,每次我想打印这个模型的对象(以模板方式和所有上下文)时,我都会简单地 include it 像这样:{% include 'mymodel_repr.html' with obj=obj_i_want_to_print %}

    使用这种方法,您可以将业务与演示分开。

    希望对您有所帮助!

    【讨论】:

    • 非常感谢!我完全理解模板部分。不确定第 4 步是什么意思,__str__(self) 是必填字段。 include 是个不错的选择。我会将其更改为 {% include obj_i_want_to_print.template with obj=obj_i_want_to_print %} 以让对象选择要打印的表示形式。
    • 我的意思是,如果__str__ 返回一个模型字段,那么这个字段应该是一个不可为空的。如果它只是返回一个普通的 str,那么忽略这一步!
    • 还有一件事:我遇到过这样的 cmets。不是 Django 的方式。只是想问问你的意思。我相信 Django 表单使用__str__ 在模板中打印表单。
    • 我不明白你的问题(尤其是 s.th 部分)!
    • 现在我明白了。我这么说是因为请求-响应周期。您的逻辑试图以某种方式反转它(访问模型中的 request 对象)。正如 Django 文档所说的 A model is the single, definitive source of information about your dataModels 应该不知道上下文。就是这样!
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2021-05-18
    • 2021-12-07
    • 2021-02-03
    • 2011-04-20
    相关资源
    最近更新 更多