【发布时间】:2018-10-09 01:35:12
【问题描述】:
我最近一直在使用 Django 的模板语言,它在大多数情况下运行良好,但最近我遇到了一个它无法解决的小问题。
我正在迭代一堆数据库对象,并从每个对象中在模板中构建一个按钮。像这样的:
{% for item in items %}
<button id="{{ item.action.id }}">
{{ item.action.text }}
</button>
{% endfor %}
这很好用,但我的Action 类是可继承的,并且可能有不同的按钮结构。假设我有时也想附加一个 javascript 函数。我的第一个想法是好吧,让我们在我的类中创建一个渲染方法,然后在我的模板中调用它。
class ScriptAction(Action):
def render(self):
return '''
<button id="{}" onclick={}>
{}
</button>'''.format(self.id, self.func, self.text)
因为没有模板更加优雅,并且不依赖固定的按钮结构:
{% for item in items %}
{{ item.action.render|safe }}
{% endfor %}
现在我的实际问题是:如果这个渲染的字符串需要 django 进一步处理怎么办?
也许 render 方法会返回一个类似
<button id="action-button-id" onclick="console.log('clicked')">
{{ item.name }}
</button>
目前,{{ item.name }} 不会在模板循环中呈现。有没有办法解决这个问题?
也许我让这变得比它应该的更复杂,但我已经查看了 Django 内置标签和过滤器,甚至查看了writing you own parser。但在这一点上,我内心的某种东西告诉我,我很痴迷。这实际上只是一个小问题,需要相当长的时间,所以 -
- 这样的努力是否值得?
- 编写这样的复杂解析器安全吗?
- Django 模板语言甚至可以做这样的事情吗?
如果您能深入了解其中的一些观点,我将不胜感激。这个问题真的很困扰我。
提前致谢!
【问题讨论】:
标签: python django django-templates django-template-filters