让我们假设以下情况。在我的数据库(模型)中,我有一个描述学生任务的字段。每个学生都应该在任务中有自己的一些变量变体。因此,我将以下模型保存为 task
在数据库中:
id | name | description |
---+---------+----------------------------------------------+
1 | Simple | This is first task. Answer is {{student_var}}|
View 的方法很简单(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 字符串传递给模板中的 View (我计划将变量以 K-V 格式保存在带有字段的表中像: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 问题。问题已关闭。
最佳答案
对于辅助方法,您可以使用 Template
和 Context
创建一些东西
from django.template import Template, Context
def process_template(tasks, student_var):
new_tasks = []
for team_task in tasks:
template = Template(team_task.task.description)
context = Context({'student_var': student_var})
rendered_template = template.render(context)
team_task.task.description = rendered_template
new_tasks.append(team_task)
return new_tasks
def render_team(request, team):
tasks = process_template(TeamFlag.objects.filter(team=team))
你可以看看documentation了解更多信息。
关于python - Django:模板中的变量中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33124464/