python - Django:模板中的变量中的变量

标签 python html django templates

让我们假设以下情况。在我的数据库(模型)中,我有一个描述学生任务的字段。每个学生都应该在任务中有自己的一些变量变体。因此,我将以下模型保存为 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 格式保存在带有字段的表中像:idkeyvalueteam_idtask_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 问题。问题已关闭。

最佳答案

对于辅助方法,您可以使用 TemplateContext 创建一些东西

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/

相关文章:

sql - 加入 Django 的高效分页

javascript - 在 Google Charts 中以不同方式为条形图的条形着色

python - Django 在 View 中通过调用 api 保存数据

python - 什么时候在django中调用模型方法

javascript - Chrome ssl 栏不会显示绿色

javascript - 显示鼠标位置

Javascript - 将对象键打印到 HTML

python - 比较 NumPy 对象引用

python - 如何在 flask 中生成动态网址?

python - 对 python 中良好的递归性能感到惊讶