在Django中,两个应用程序如何响应相同的URL?

在Django中,两个应用程序如何响应相同的URL?,django,django-templates,portlet,multiple-inheritance,Django,Django Templates,Portlet,Multiple Inheritance,我想我缺少了一个基本的概念。在传统的Django项目中,您将有两个应用程序响应不同的URL: http://localhost/myproj/app1/33 http://localhost/myproj/app2/newcomment.html 但是有什么机制可以处理两个应用程序互补的情况——比如一个提供内容,另一个提供演示?或者,一个是内容,另一个是静态的、侧面的内容,应该出现在每个页面上 特别是,我不明白两个应用程序如何使用模板继承来扩展同一个模板。假设有一个基本应用程序“baseapp

我想我缺少了一个基本的概念。在传统的Django项目中,您将有两个应用程序响应不同的URL:

http://localhost/myproj/app1/33
http://localhost/myproj/app2/newcomment.html
但是有什么机制可以处理两个应用程序互补的情况——比如一个提供内容,另一个提供演示?或者,一个是内容,另一个是静态的、侧面的内容,应该出现在每个页面上

特别是,我不明白两个应用程序如何使用模板继承来扩展同一个模板。假设有一个基本应用程序“baseapp”和一个模板“base.html”:

App2添加了一个小横幅或其他内容:

{% extends "baseapp/templates/base.html" %}

{% block content %}
<div class="banner">Please support our site!</div>
{{ block.super }}
{% endblock %}
{%extends“baseapp/templates/base.html”%}
{%block content%}
请支持我们的网站!
{{block.super}}
{%endblock%}
那么,这两个模板都可以通过什么方式显示呢?我能想到:

  • app1可以扩展app2的模板。但这似乎是错误的:app1是内容提供商,不应该依赖于像app2这样微不足道的东西
  • app2可以扩展app1的模板。但这似乎是错误的:现在URL方案必须将每个URL都通过app2(如果我理解正确的话)
  • 中间件

  • 正如我所说,我可能遗漏了一些非常基本的东西。或者我做了一些我不知道的非常错误的假设。(这个问题是我第三次尝试,在和之后-我很难确定问题的框架。)

    应用程序不响应URL,视图响应。View是一个可以使用任何应用程序中的模型、表单和其他对象的函数。这里没有任何问题


    如果您想向模板添加一些内容,继承并不是唯一的方法。您最好使用custom或custom。

    我想我在这里真正缺少的是:

    • 应用程序只需在右子目录中包含正确名称的模板,即可覆盖模板。Django文档没有很清楚地说明这一点,我可以看到:它们在管理模板的上下文中引用了此功能
    • 如上所述重写模板时,您不能扩展它,但:
    • 通过此代码段,您可以覆盖模板并对其进行扩展:

    这里有一个密切相关的问题:

    你的第二个应用程序是一个模板标签;这是你第一次尝试时提出的建议。好吧-我会仔细看看。我只是来发布与你第一句完全相同的内容:-)好吧,但应用程序通常包含views.py,对吗?当你说“没有任何问题”时,我想我是在考虑诸如可维护性、互操作性和减少大部分不相关问题之间的依赖性等问题。@SteveBennett你的特定问题是通过使用上下文处理器/模板标记来解决的。如果(通常)你想保持你的应用程序松散耦合,只需创建另一个应用程序,它将在其视图中连接你的应用程序。但我在实践中从未遇到过这个问题。
    {% extends "baseapp/templates/base.html" %}
    
    {% block content %}
    ... here's the actual content...
    {% endblock %}
    
    {% extends "baseapp/templates/base.html" %}
    
    {% block content %}
    <div class="banner">Please support our site!</div>
    {{ block.super }}
    {% endblock %}