在Django模型中存储和转义Django标签和过滤器
我正在把模型中的内容输出到模板中,但有些模型字段需要调用其他模型存储的数据。这种情况只发生在少数几个字段上。我在想,使用if
标签来判断这些情况,是否比把django标签直接放在模型里更有效。
对这个问题的回答提到,把django标签存储在模型里不是个好主意,但没有给出具体原因(我觉得其中一个原因可能是其他人可能会在数据库里注入一些标签)。假设数据库注入的情况很少见,有没有办法处理存储在模型中的Django标签和过滤器呢?
或者更好的是,处理这种情况的最有效方法是什么?也就是说,如何让一个模型的多个字段调用另一个模型中存储的字段。
举个例子:
这些内容应该存储在我的模型中
<p>We focus on:</p>
{% for item in services %}
{% url service_view item.id as service_url %}
<ul>
<li><a href="service_url">{{item.title}}</a></li>
</ul>
{% endfor %}
输出时,django应该能像处理模板一样解析相关的django标签。
3 个回答
0
你应该使用包含标签,然后在你想要显示HTML的地方放这个标签。模型只需要生成变量的值,而不是负责格式化这些值。
0
django-dbtemplates 这个东西可能很接近你想要的功能。
1
谢谢你,Ned。我试着按照你的方法去做,但我发现这挺复杂的,而且在可移植性方面也有些不方便。
不过,我在Django Snippets上找到了我需要的东西(不知道为什么我没先去那里找)。这是一个非常实用的工具,叫做 render_as_template。
设置好这个自定义标签后,我只需要用 {% render_as_template about_view.content %}
这样的方式来使用它,模型中的标签就能正确显示为模型了。
关于如何创建你自己的自定义模板和标签的说明,可以在 这里找到。