Python / Django - данные не появляются из запроса на выборку в шаблоне - PullRequest
0 голосов
/ 03 октября 2018

Я новичок в python и пытаюсь получить данные из импортированного API новостей, однако, несмотря на отсутствие видимой ошибки, она не отображается в шаблоне.Я пытаюсь в рамках MVC организовать мой код

Начиная с views.py

из в будущем импорт unicode_literals

import json
import logging
import requests
from django.http import HttpResponse
from django.template import loader
from django.shortcuts import redirect, render
from django.urls import reverse_lazy
from django.views import generic
from newsapi import NewsApiClient

from .forms import UserProfileCreationForm
from .models import Animals

def news_list(request):
    newsapi = NewsApiClient(api_key='123')
    all_articles = newsapi.get_everything(
    q='animals',
    sources='bbc-news,national-geographic, new-scientist, reddit-r-all',
    from_param='2018-09-29',
    to='2018-09-22',
    language='en',
    sort_by='relevancy')['articles']
    context = {'articles': all_articles,
           'type': str(type(all_articles)),
           'name': 'Someone'}

    template = loader.get_template('home.html')

    return HttpResponse(template.render(context, request))

Тогда urls.py

from django.conf.urls import url, include
from . import views

urlpatterns = [
  url(r'^$', views.news_list, name="news_list"),
]

Здесь также urls.py из папки проекта, не уверен, полезно ли это или нет

from django.conf.urls import url, include
from django.contrib import admin
from django.views.generic.base import TemplateView


urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
   url(r'^users/', include('dangerzone.urls')),
   url(r'^users/', include('django.contrib.auth.urls'))
]

И, наконец, шаблоны

base.html

<!DOCTYPE html>
 <html>
  <head>
   <meta charset="utf-8">
    <title>
     {% block title %}
      Python App
     {% endblock title %}
    </title>
   </head>
   <body>
    <main>
     {% block content %}

     {% endblock content %}
    </main>
   </body>
  </html>

home.html

{% extends 'base.html' %}

 {% block content %}

   <h2>Latest News</h2>
    <ul>
     {% for article in articles %}
      <li>{{ article.source }}</li>
      <li>{{ article.author }}</li>
      <li>{{ article.title }}</li>
     {% endfor %}
    </ul>
 {% endblock content %}

Если требуется дополнительная информация, пожалуйста, дайте мне знать.

Пока я пытался:

  1. Изменение адреса URL с r'^$' на ''
  2. Импорт без HttpResponse выглядит так:

     def news_list(request):
         newsapi = NewsApiClient(api_key='123')
         all_articles = newsapi.get_everything(
              q='animals',
              sources='bbc-news,national-geographic, new-scientist, reddit-r-all',
              from_param='2018-09-29',to='2018-09-22',
              language='en',
              sort_by='relevancy',
              page=2)['articles']
        return render(request, 'home.html', {'articles' : all_articles})
    

1 Ответ

0 голосов
/ 03 октября 2018

Не могли бы вы сообщить нам свои версии Python / Django?

Кроме того, если я не ошибаюсь, ваш

template = loader.get_template('home.html')

return HttpResponse(template.render(context, request))

находится за пределами вашего news_list() функция.

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