You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTML模板中访问字典数据?解决'tuple' object has no attribute 'get'报错

解决Django条目页面的两个问题:字典数据访问与Markdown转换

错误根源

你碰到的'tuple' object has no attribute 'get'错误,核心原因是views.py中entry函数的返回值写法错误——你把render调用和上下文字典用逗号分隔,导致返回了一个元组,而Django需要的是标准HTTP响应对象。


问题1:在entry.html模板中访问字典数据

1. 修正views.py的返回逻辑

把错误的返回代码:

return render(request, 'encyclopedia/entry.html'), {
    'entry': util.get_entry(name),
    'name': name
}

改成正确形式(将上下文字典作为render函数的第三个参数传入):

from . import util

def entry(request, name):
    entry_content = util.get_entry(name)
    if entry_content is not None:
        # 提前获取内容,避免重复调用get_entry
        return render(request, 'encyclopedia/entry.html', {
            'entry': entry_content,
            'name': name
        })
    else:
        return render(request, "encyclopedia/404.html")

2. 模板中直接访问数据

修正后,模板里的{{ name }}和{{ entry }}就能正常读取上下文字典中的数据,无需修改模板变量写法。


问题2:是否需要将Markdown转换为HTML?

需要。util.get_entry返回的是原始Markdown文本,直接在模板中显示会是纯文本格式,无法解析为富文本。处理步骤如下:

1. 安装Markdown转换库

pip install markdown

2. 在views.py中转换Markdown为HTML

修改entry函数,将获取到的Markdown文本转换为HTML:

from . import util
import markdown

def entry(request, name):
    entry_content = util.get_entry(name)
    if entry_content is not None:
        # 转换Markdown内容为HTML格式
        entry_html = markdown.markdown(entry_content)
        return render(request, 'encyclopedia/entry.html', {
            'entry': entry_html,
            'name': name
        })
    else:
        return render(request, "encyclopedia/404.html")

3. 模板中允许HTML渲染

Django默认会转义HTML内容,因此需要在模板中给entry变量添加safe过滤器,确保HTML能正常渲染:

{% extends "encyclopedia/layout.html" %}

{% block title %}
{{ name }}
{% endblock %}

{% block style %}{% endblock %}

{% block body %}
<div class="left">{{ entry|safe }}</div>
<div class="right">
    <a href="{% url 'edit' %}">
        <button class="edit">Edit</button>
    </a>
</div>
{% endblock %}

内容的提问来源于stack exchange,提问作者tices

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:54:20