【问题标题】:How do include a dynamic template from another app in Django?如何在 Django 中包含来自另一个应用程序的动态模板?
【发布时间】:2010-11-10 00:29:40
【问题描述】:

我目前有两个应用程序:

app1/
app2/
templates/
    app1.html
    app2.html

在 app1.html 中,我包含了 app2.html:

<!-- app1.html -->
{% include "app2.html" %}

app2 有一些动态内容:

<!-- app2.html -->
{% app2_value %}

当我显示 app1.html 时,值 app2_value 不显示。在 Django 中处理上述问题的最佳方法是什么?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    您实际上可以将寺庙渲染为字符串,然后将其发送到另一个模板进行显示。您仍然需要将变量作为字符串发送到您正在渲染的模板。一个很好的用例是使用相同的模板以特殊方式呈现列表或字典。

    【讨论】:

      【解决方案2】:

      在 Django 中,您的视图和模板是相互分离的,因此当您在模板中使用 {% app2_value %} 时,它会假定它是从调用视图传递给它的。

      所以,要回答您的问题,要显示该值,请将其传递给 app1 模板,无论您使用什么视图来调用它:

      # app1 views.py
      from django.shortcuts import render_to_response
      import app2
      
      def app1_view(request):
          return render_to_response('app1.html', {'app2_value': app2.somevalue})
      

      【讨论】:

        【解决方案3】:

        Django 并不真正处理动态,包括像 PHP 或其他语言那样。相反,您应该有一个基本模板,并使用模板继承和块来完成您想要做的事情。

        因此,您的 app2.html 将具有相同的动态内容,但有一个位置供 app1.html 覆盖或插入内容。

        app2.html:
        
        {% block 'title' %}
        {{ app2.title }}
        {% endblock %}
        
        {% block 'content' %}
        {% endblock %}
        

        App1 的模板可以扩展 App2 的:

        app1.html:
        
        {% extends "app2.html" %}
        
        {% block 'title' %}
        Actually App 1!
        {% endblock %}
        
        {block 'content' %}
        ...
        {% endblock %}
        

        不幸的是,包含处理在 Django 中仍然是新事物,并且违背了我在文档和社区中看到的最佳实践。

        【讨论】:

        • 我想我的目的是通过包含处理使我的应用程序可重用。我可能不得不在视图端处理这种逻辑,因为 app2.html 应该是独立的。
        猜你喜欢
        • 2011-06-02
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 2017-10-30
        相关资源
        最近更新 更多