Javascript отображает необработанный JSON, а не HTML-контент, как кнопка «index».
Я разрабатываю веб-приложение на Django, которое позволяет пользователям следить друг за другом и просматривать ленту сообщений от пользователей, за которыми они следуют. У меня есть кнопка, которая запускает AJAX-запрос к представлению Django, предназначенному для получения и отображения соответствующих постов. Мое представление Django корректно извлекает посты пользователей, за которыми следит вошедший в систему пользователь, и возвращает их в виде JSON-ответа. Однако, когда мой JavaScript-код получает этот ответ, он не выводит посты на страницу в виде HTML. Вместо этого браузер отображает необработанные данные в формате JSON. Я ожидаю, что JavaScript будет использовать данные JSON для обновления страницы с HTML-контентом, представляющим посты, но этого не происходит. Как я могу убедиться, что мой JavaScript правильно обрабатывает JSON и отображает посты в виде HTML? Спасибо за помощь ❤️
post.js:
document.addEventListener('DOMContentLoaded', function() {
// Use buttons to toggle between views
const index = document.querySelector('#index')
const following = document.querySelector('#following')
if(index) {
index.addEventListener('click', () => load_data('index'));
}
if (following) {
following.addEventListener('click', () => load_data("following"));
}
// By default, load the index
load_data('index');
});
function load_data(type) {
console.log("type:", type);
let url;
if (type == "index") {
url = "/post"
} else if (type == "following") {
url = "/following"
} else {
return
}
console.log("url: ", url)
fetch(url)
.then(response => response.json())
.then(posts => {
console.log("posts:", posts);
const postsContainer = document.querySelector("#postsContainer");
if(postsContainer) {
postsContainer.innerHTML = '';
}
posts.forEach(post => {
.....
}
layout.html:
<li class="nav-item">
<a id="index" class="nav-link" href="{% url 'index' %}">All Posts</a>
</li>
{% if user.is_authenticated %}
<li class="nav-item">
<a class="nav-link" href="{% url 'create-post' %}">New Post</a>
</li>
<li class="nav-item">
<a id="following" class="nav-link" href="{% url 'following' %}">Following</a>
</li>
views.py:
@login_required
def following(request):
user = request.user
user_followings = Follow.objects.filter(follower=user)
posts = []
for user_following in user_followings:
posts.extend(Post.objects.filter(user=user_following.followed).order_by('-date'))
return JsonResponse([post.serialize() for post in posts], safe=False)
Я нашел свою проблему в том, что у меня много шаблонов html-файлов, поэтому я забыл добавить, в какие шаблоны html-файлов должна рендериться кнопка Following.
views.py:
def post_following(request):
return HttpResponseRedirect(reverse("index"))
urls.py:
path("post/following", views.post_following, name="post-following"),
layout.html:
<a id="following" class="nav-link" href="{% url 'post-following' %}">Following</a>