Показать текст из файла Json в шаблоне Django
Я начинаю изучать django, я создал несколько базовых шаблонов / представлений и хочу отобразить текст из файла json, расположенного в папке assets/jsons.Файл называется "quotes.json". Содержимое файла json:
{
"emp_details": [
{
"emp_name": "johnny",
"email": "example1.mail@gmail.com",
"job_profile": "intern"
},
{
"emp_name": "gustav",
"email": "gustav.empl@gmail.com",
"job_profile": "developer"
},
{
"emp_name": "emily",
"email": "emily@gmail.com",
"job_profile": "Full Time"
}
]
}
вот этот views.py :
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import get_user_model
#from . import models
def homepage(request):
##here is where I want to have the json data
##and return it in the render along with the request and 'homepage.html'
return render(request,'homepage.html')
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})
здесь есть homepage.html , в layout.html есть css и некоторые кнопки навигации, но это не имеет значения. Я буквально хочу, чтобы содержимое json отображалось только в виде текста на главной странице.
{% extends 'layout.html' %}
{% block title %}
Home
{% endblock %}
{% block content %}
{% load static %}
{% load static %}
<script type="text/javascript">
console.log(json1_data);
</script>
<h1>Home</h1>
<h1><p>Welcome {{request.user}}</p></h1>
<p>Check out my <a href="/about">About</a> page.</p>
<p id="demo"> </p>
{% endblock %}
Я попытался импортировать файл с помощью basic python, но особого успеха не добился
Один из способов сделать это - записать логику в свои представления для чтения файла и десериализации его с помощью json.load, затем передать контекст шаблону, который будет отображен:
from django.shortcuts import render
import json
def homepage(request):
with open('assets/jsons/quotes.json') as json_file:
data = json.load(json_file)
return render(request, 'homepage.html', {'data': data})
Затем в вашем шаблоне homepage.html:
{% block content %}
{% for item in data.emp_details %}
<section>
<p><strong>{{ item.emp_name }}</strong></p>
<p>{{ item.email }}</p>
<p>{{ item.job_profile }}</p>
</section>
{% endfor %}
{% endblock content %}
И, наконец, ваш urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.homepage, name='home'),
]
Это вернет значение:
johnny
example1.mail@gmail.com
intern
gustav
gustav.empl@gmail.com
developer
emily
emily@gmail.com
Full Time
Я думаю, что причина, по которой вы не сохраняете файл в базе данных, заключается в том, что вы выбираете файл в браузере и отображаете его данные на странице или, возможно, отправляете их в серверную часть. Для этого вам нужно написать код javascript, как показано ниже. вам нужно изменить его для отправки данных в серверную часть.
{% extends 'layout.html' %}
{% block title %}
Home
{% endblock %}
{% block content %}
{% load static %}
<h1>Home</h1>
<div>
<label for="jsonFile">Select JSON file:</label>
<input type="file" id="jsonFile" accept=".json" />
<button onclick="loadJsonFile()">Load File</button>
</div>
<div id="jsonContent">
</div>
<p>Check out my <a href="/about">About</a> page.</p>
<p id="demo"> </p>
<script>
function loadJsonFile() {
const fileInput = document.getElementById('jsonFile');
const file = fileInput.files[0];
if (!file) {
alert('Please select a file!');
return;
}
const reader = new FileReader();
reader.onload = function(e) {
try {
const jsonData = JSON.parse(e.target.result);
displayJsonData(jsonData);
} catch (error) {
alert('JSON file could not be parsed');
}
};
reader.readAsText(file);
}
function displayJsonData(jsonData) {
const contentDiv = document.getElementById('jsonContent');
if (jsonData.emp_details && Array.isArray(jsonData.emp_details)) {
let html = '';
jsonData.emp_details.forEach((employee, index) => {
html += `
<div">
<p><strong>Name:</strong> ${employee.emp_name}</p>
<p><strong>Email:</strong> ${employee.email}</p>
<p><strong>Position:</strong> ${employee.job_profile}</p>
</div>
`;
});
contentDiv.innerHTML = html;
} else {
contentDiv.innerHTML = '<p>JSON format is not as expected.</p>';
}
}
</script>
{% endblock %}