【问题标题】:Populate list in Django using view使用视图在 Django 中填充列表
【发布时间】:2020-04-04 22:45:19
【问题描述】:

我有以下函数可以将新闻标题读入 Python 列表:

import requests


def us_news_articles():
    url = 'https://newsapi.org/v2/top-headlines?country=us&apiKey=###
    source = requests.get(url)
    data = source.json()
    us_news_articles_list = []
    for article in data['articles']:
        us_news_articles_list.append(article)
    return us_news_articles_list

这个功能有效,我已经验证过了。

现在我希望能够使用它来填充 HTML li 项目

我构建了以下视图:

def viz(request):
    return render(request, 'resume/viz.html')

class USNewsArticles(TemplateView):
    template_name = 'viz'

    def get_context_data(self, *args, **kwargs):
        context = {
            'articles': us_news_articles(),
        }
        return context

我的网址是这样的

path('viz/', views.viz, name='viz')

在我的 HTML 文件中,我有以下内容:

            <ul>
            {% for article in articles %}
              <li>{{ article.title }}</li>
                <ul>
                  <li>{{ article.description }}</li>
                </ul>
            {% endfor %}
            </ul>

但是,当我部署网站时,我没有得到任何列表。我认为这是视图的问题,但我在理解视图和功能方面不够精通,无法理解为什么它不会填充 li 项目

【问题讨论】:

    标签: python html django python-3.x


    【解决方案1】:

    您的 URL 被路由到您的 viz 视图,该视图仅呈现一个空模板 (viz.html)。我想你的意思是这样的:

    class USNewsArticles(TemplateView):
        template_name = 'resume/viz.html'
    
        def get_context_data(self, *args, **kwargs):
            context = {
                'articles': us_news_articles(),
            }
            return context
    

    还有你的网址:

    path('viz/', USNewsArticles.as_view())
    

    TemplateView 是一个帮助器,您可以在其中直接指定模板文件,并提供适当的GET 处理程序。 - 不需要中间的def myview 函数。事实上,基于类的视图的美妙之处在于它为您编写了很多样板。除非您正在自定义行为,否则您通常不必手动编写返回 Responses 的方法。

    【讨论】:

    • 成功了!只需要将类导入我的 URL。后续问题,如果我想编写多个不同的 API 调用,我可以将这些新类传递到同一个上下文中吗?例如,上面是美国新闻,但假设我做了一个新的 API 调用英国新闻。
    • 在这种情况下,我建议在您的 url 路径中传递 country,并根据值更改模板上下文。
    • 例如,path('viz/&lt;country&gt;', views.viz, name='viz')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2014-01-05
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多