在Django模板中展示JSON文件内容的技术实现问询
在Django模板中展示JSON文件内容的技术实现问询
我来帮你搞定在Django主页展示JSON文件内容的需求,咱们分两步修改代码就能实现:
第一步:修改views.py,读取JSON文件并传递数据给模板
首先你需要导入json、os模块以及Django的settings来正确定位JSON文件路径,然后读取文件内容并传给模板。修改后的homepage函数如下:
from django.http import HttpResponse from django.shortcuts import render from django.contrib.auth import get_user_model from django.conf import settings import json import os #from . import models def homepage(request): # 拼接JSON文件的绝对路径,避免硬编码路径导致的错误 json_file_path = os.path.join(settings.BASE_DIR, 'assets', 'jsons', 'quotes.json') # 读取并解析JSON文件 try: with open(json_file_path, 'r', encoding='utf-8') as f: json_data = json.load(f) # 将JSON数据转成格式化的字符串,方便在页面上可读性展示 json_formatted_text = json.dumps(json_data, indent=4, ensure_ascii=False) except FileNotFoundError: json_formatted_text = "JSON文件未找到,请检查路径是否正确" # 把格式化后的文本和原JSON数据都传给模板 return render(request, 'homepage.html', { 'json_formatted_text': json_formatted_text, 'json_data': json_data }) def about(request): return render(request,'about.html') def users(request): User = get_user_model() users = User.objects.all() return render(request,'users.html',{'users':users})
这里做了几个关键处理:
- 用
settings.BASE_DIR拼接路径:BASE_DIR是Django项目的根目录,这样不管项目部署在哪里,都能正确找到JSON文件 - 加了异常捕获:防止文件找不到时页面报错
- 用
json.dumps格式化字符串:生成带缩进的易读文本,ensure_ascii=False保证非ASCII字符正常显示
第二步:修改homepage.html,展示JSON内容
你需要用<pre>标签来展示格式化的JSON文本(它会保留缩进和换行),同时如果需要在JS中使用数据,要加上|safe过滤器避免Django自动转义引号。修改后的模板内容:
{% extends 'layout.html' %} {% block title %} Home {% endblock %} {% block content %} {% load static %} <h1>Home</h1> <p>Welcome {{request.user}}</p> <p>Check out my <a href="/about">About</a> page.</p> <!-- 展示格式化的JSON文本,用pre标签保留格式 --> <h2>JSON文件内容:</h2> <pre>{{ json_formatted_text }}</pre> <!-- 如果需要在JavaScript中使用JSON数据,这样处理 --> <script type="text/javascript"> // 用|safe过滤器让Django不转义JSON的引号 const json1_data = {{ json_data|safe }}; console.log(json1_data); </script> {% endblock %}
这里的关键细节:
<pre>标签:专门用来展示预格式化的文本,能完美保留JSON的缩进结构|safe过滤器:Django默认会转义HTML特殊字符(比如引号),加上这个过滤器后,JS才能正确解析JSON对象
注意事项
- 确认
assets/jsons/quotes.json的位置是否正确:如果你的assets文件夹是在某个APP的static目录下,需要调整json_file_path的拼接逻辑,比如os.path.join(settings.BASE_DIR, '你的APP名称', 'static', 'assets', 'jsons', 'quotes.json') - 如果你只是想把JSON的原始内容(未解析的字符串)直接展示,也可以直接读取文件的原始文本,不用
json.load和json.dumps,直接f.read()即可
内容来源于stack exchange
相关产品推荐
相关产品推荐

