【问题标题】:How to make a GET request in an extended Django template如何在扩展的 Django 模板中发出 GET 请求
【发布时间】:2021-07-14 12:54:00
【问题描述】:

我有一个简单的导航栏base.html,其中包含指向其他页面的链接。目前,我在所有其他页面上扩展base.html 模板。我想从天气 API 调用 GET 请求,以显示城市名称和当前温度等简单信息,并将其显示在导航栏上。由于base.html 模板没有与视图本身链接,我不确定如何去做。我已经成功地从 API 获取信息并在测试页面中显示信息。

base.html:

<body>
    <div class="container-fluid bg-light">
        <div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
            <i class="far fa-newspaper fa-5x"></i>
            <a href="{% url 'news_list:homepage' %}" class="nav-link link-dark display-4">Ziņu portāls</a>
            <ul class="nav align-items-center ms-auto me-auto">
                <li><a href="{% url 'news_list:all_posts' %}" class="nav-link link-dark pt-4"><h2>Visi raksti</h2></a></li>
                <li><a href="{% url 'news_list:new_post' %}" class="nav-link link-dark pt-4"><h2>Pievienot rakstu</h2></a></li>
                <li><h2>Information from API</h2></a></li>
            </ul>
        </div>
        <hr/>
    </div>
    {% block content %}{% endblock content %}
 </body>

【问题讨论】:

    标签: python django


    【解决方案1】:

    有几种方法:

    1. 您可以实现custom template tag
    2. 您可以编写自己的自定义上下文处理器并将其注入每个渲染的模板enter link description here

    每种方法都有自己的权衡取舍。由于您正在尝试显示动态数据,因此请注意您自己的缓存或访问过多的外部服务会减慢渲染速度(以免造成阻塞)。

    【讨论】:

    • 最终创建了一个自定义上下文处理器 - 它按建议工作
    • 感谢外部源和上下文,因为模板标签不适合期待已久的操作。标记是一种快速的解决方法,但却是糟糕的设计决策。
    【解决方案2】:

    创建一个模板上下文处理器,如 This answer 所示

    然后,您需要将其呈现到您的 base.html 中,以便应用于您的应用程序中的所有模板。

    【讨论】:

      【解决方案3】:

      尝试自定义模板标签。 涉及的步骤:

      1. 在与您的视图相同的级别创建目录templatetags,并使用__init__.py
      2. templatetags 中创建一个任意名称的文件,例如make_get_request.py
      3. 在该文件中,输入如下内容:
      from django import template
      
      register = template.Library()
      
      @register.filter(name = 'get_request')
      def get_request():
          #make your request here
          #return a list, dict etc. with the info you need
      
      1. 重启服务器。
      2. 在模板中写{% load make_get_requests %}即文件名。
      3. 使用模板中的函数,如:
      {% get_request %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 2018-08-25
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多