Проект Django - посты из файла json не отображаются в браузере - PullRequest
0 голосов
/ 10 мая 2019

В рамках проекта Django я пытаюсь извлечь содержимое файла json (который является каталогом проекта, где находится файл manage.py) и отобразить его в браузере вместе с другими публикациями.

Я следовал этим инструкциям в оболочке, без ошибок, поэтому его следовало сохранить.

Команды оболочки

(InteractiveConsole)
>>> import json
>>> from socialmedia.models import Post
>>> with open('posts.json') as f:
...     posts_json = json.load(f)
...
>>> for post in posts_json:
...     post = Post(title=post['title'], content=post['content'], author_id=post['user_id'])
...     post.save()

Однако при запуске сервера сообщения не отображаются на странице.

Обновление: Я увидел комментарий, в котором говорилось, что эта ошибка загрузки / рендеринга сообщений из json может быть связана с номерами идентификаторов сообщений. Ранее я это делал удаляйте сообщения с id = 1 и id = 2 и т. д., чтобы их больше не было. Я не знаю, как исправить эту проблему, если это действительно является причиной проблемы. Четкое объяснение следующих шагов было бы полезно в ответе. То, что я пробовал (с результирующей синтаксической ошибкой), находится внизу этого вопроса.

Это код в home.html странице

{% extends "socialmedia/base.html" %}
{% block content %}

    <h1>Fakebook</h1>
    {% for post in posts%}
        <article class="media content-section">
            <img class="rounded-circle article-img" src="{{post.author.profile.image.url}}">
        <div class="media-body">
            <div class="article-metadata">
          <a class="mr-2" href="#">{{ post.author }}</a>
          <small class="text-muted">{{ post.date_posted|date:"F d, Y"}}</small>
        </div>
        <h2><a class="article-title" href="{% url 'post-detail' post.id %}">{{ post.title }}</a></h2>
        <p class="article-content">{{ post.content }}</p>
      </div>
    </article>
    {% endfor %}

{% endblock content %}

и это соответствующий код в views.py

from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from .models import Post #import the Models Post
from django.views.generic import (
    ListView,
    DetailView,
    CreateView,
    UpdateView,
    DeleteView
)

from django.http import HttpResponse
# Create your views here.

class PostListView(ListView):
    model = Post #what model to query in order to create the list
    template_name = 'socialmedia/home.html' 

    context_object_name = 'posts'
    ordering = ['-date_posted']

class PostDetailView(DetailView):
    model = Post 

Файл json:

posts.json

хранится в каталоге pseudofacebook вместе с manage.py

Формат выглядит следующим образом:

posts.json

[
  {
    "title": "My Updated Post",
    "content": "My first updated post!\r\n\r\nThis is exciting!",
    "user_id": 1
  },
  {
    "title": "A Second Post",
    "content": "This is a post from a different user...",
    "user_id": 2
  },
  {
    "title": "Top 5 Programming Lanaguages",
    "content": "Te melius apeirian postulant cum, labitur admodum cu eos! Tollit equidem constituto ut has. Et per ponderum sadipscing, eu vero dolores recusabo nec! Eum quas epicuri at, eam albucius phaedrum ad, no eum probo fierent singulis. Dicat corrumpit definiebas id usu, in facete scripserit eam.\r\n\r\nVim ei exerci nusquam. Agam detraxit an quo? Quo et partem bonorum sensibus, mutat minimum est ad. In paulo essent signiferumque his, quaestio sadipscing theophrastus ad has. Ancillae appareat qualisque ei has, usu ne assum zril disputationi, sed at gloriatur persequeris.",
    "user_id": 1
  },
  {
    "title": "Sublime Text Tips and Tricks",
    "content": "Ea vix dico modus voluptatibus, mel iudico suavitate iracundia eu. Tincidunt voluptatibus pro eu? Nulla omittam eligendi his ne, suas putant ut pri. Ullum repudiare at duo, ut cum habeo minim laudem, dicit libris antiopam has ut! Ex movet feugait mea, eu vim impetus nostrud cotidieque.\r\n\r\nEi suas similique quo, his simul viris congue ex? Graeci possit in est, ne qui minim delectus invenire. Mei ad error homero maluisset, tacimates assentior per in, vix ut vocent accusata! Mei eu inermis pericula patrioque? Debet denique sea at, ad cibo reformidans theophrastus per, cu inermis maiestatis vim!\r\n\r\nUt odio feugiat voluptua est, euismod volutpat qualisque at sit, has ex dicit ornatus inimicus! Eu ferri laoreet vel, dicat corrumpit dissentias nec in. Illum dissentiunt eam ei, praesent voluptatum pri in? Ius in inani petentium, hinc elitr vivendum an vis, in vero dolores electram ius?",
    "user_id": 1
  },
  {
    "title": "Best Python IDEs",
    "content": "Elit contentiones nam no, sea ut consul adipiscing. Etiam velit ei usu, sonet clita nonumy eu eum. Usu ea utroque facilisi, cu mel fugit tantas legimus, te vix quem nominavi. Prima deserunt evertitur ne qui, nam reprimique appellantur ne.",
    "user_id": 1
  },
  {
    "title": "Flask vs Django - Which Is Better?",
    "content": "Ei dicta apeirian deterruisset eam, cu offendit invenire pri, cu possim vivendo vix? Nam nihil evertitur ad, ne vim nonumy legendos iracundia. Vix nulla dolorem intellegebat ea? Te per vide paulo dolor, eum ea erant placerat constituam? Dolores accumsan eum at.\r\n\r\nInteresset consequuntur id vix. Eam id decore latine, iusto imperdiet ei qui. In ludus consul reformidans eam. Nec in recusabo posidonium, cu tantas volumus mnesarchum pro. Nam ut docendi evertitur, possim menandri persecuti ne sed, cum saepe ornatus delenit ei?\r\n\r\nIn mel debet aliquam. In his etiam legere, doming nominavi consetetur has ad, decore reprimique ea usu. Eam magna graeci suavitate cu, facete delenit cum ne. Ponderum evertitur tincidunt ei mel, ius ei stet euismod docendi.",
    "user_id": 2
  }
]

Как уже упоминалось, интерактивная оболочка принимала все команды и не выдает никаких ошибок.

Я не уверен, как устранить неполадки, и не нашел никаких вопросов с решениями по stackoverflow для этой конкретной проблемы.

Обновление: что я пробовал:

Если ни один пользователь не возвращается для идентификаторов 1 и 2 (как в моем случае), я попытался создать нового пользователя с:

Я пробовал это: (в оболочке)

User.objects.create_user(username='missing', email='missing@email.com', password='testing321', id=<1>) 

В результате возникает ошибка:

    ^
SyntaxError: invalid syntax
>>>

По запросу, Опубликовать модель (models.py в соцмедиа)

from django.db import models
from django.utils import timezone #don't forget to add this
from django.contrib.auth.models import User
from django.urls import reverse

# Create your models here.


class Post(models.Model):
    title=models.CharField(max_length=100)
    content=models.TextField(max_length=300)
    date_posted=models.DateTimeField(default=timezone.now) 



    def __str__(self): #create a dunder underscore method to return strings in the view (instead of objects)
        return self.title


    def get_absolute_url(self):
        return reverse('post-detail',kwargs={'pk':self.pk})

1 Ответ

0 голосов
/ 10 мая 2019

Частичный ответ

Нашел одну часть ответа, но посты ЕЩЕ НЕ РЕНДЕНИРУЮТ:

Мне удалось добавить идентификатор и объект для идентификаторов 1 и 2, которые отсутствовали.

**(InteractiveConsole)
>>> from django.contrib.auth.models import User
>>> User.objects.get(id=1)
<User: missing1>
>>>**

Прежде всего, в оболочке, когда вы создаете нового пользователя, не забудьте сначала импортировать следующее : (без которого пользователь не будет распознан)

from django.contrib.auth.models import User

Тогда синтаксическая ошибка была <> в идентификаторе, вместо использования целого числа. Я использовал id = <1> вместо просто id = 1

Полный список команд, используемых для решения проблемы:

SyntaxError: invalid syntax
>>> user=User.objects.create_user(username='missing1',email='missing1@gmail.com',password='testing123',id=1)
>>> user.save()
>>> User.objects.get(id=1)
<User: missing1>
>>> User.objects.create_user(username='missing2', email='missing2@email.com', password='testing321', id=2)
<User: missing2>
>>> user.save()
>>> User.objects.get(id=2)

Я надеюсь, что кто-то другой может предоставить часть 2 и полный ответ, чтобы я мог получить посты для рендеринга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...