【发布时间】:2016-01-12 11:46:14
【问题描述】:
让我们假设以下情况。在我的数据库(模型)中,我有一个描述学生任务的字段。每个学生在任务中都应该有自己的一些变量的变体。所以,我在数据库中保存了以下名为task 的模型:
id | name | description |
---+---------+----------------------------------------------+
1 | Simple | This is first task. Answer is {{student_var}}|
视图的方法很简单(TeamFlag 是一个用于关联团队和任务的表格:
def render_team(request, team):
tasks = TeamFlag.objects.filter(team=team)
return render(request,
'team.html',
dict({'team': team,
'tasks': tasks,
'student_var': 'foo',
}))
在我的模板中:
{% for team_task in tasks %}
<li class="item">
<h6>{{ team_task.task.name }}</h6>
<div class="task-content">{% autoescape off %}
{{team_task.task.description }}
{% endautoescape %}</div>
结果我看到了:
This is first task. Answer is {{student_var}}
在 Django 中有什么方法可以预处理字符串内的变量,并将处理后的 HTML 字符串传递给模板内的视图,基于变量(我计划将变量以 KV 格式保存在带有字段的表中比如:id、key、value、team_id、task_id)。
一般来说,我想要一些像process_template(html_string, kv-data) 这样的方法,它返回处理过的HTML 字符串或类似的东西。我听说过模板的自定义过滤器,但我不确定是否是这样。
UPD:我成功添加了以下代码:
tasks = TeamFlag.objects.filter(team=team)
for tf in tasks:
data = TaskData.objects.filter(team=team, task=tf.task)
tf.task.description = Template(tf.task.description).render(
Context(dict(zip([x.key for x in data],
[x.value for x in data]))))
不过,Django 现在会忽略 tf.task.description 中的布局。我的新描述如下:
I have some {{temp}} <b>here</b> and it's {{temp2}}
它正在渲染,我可以在页面的源代码中看到它,但实际上什么也没发生。
UPD2:似乎是 CSS 问题。问题已结束。
【问题讨论】:
标签: python html django templates