Django-在项目中一起使用不同的应用程序

Django-在项目中一起使用不同的应用程序,django,django-templates,django-views,django-apps,Django,Django Templates,Django Views,Django Apps,到目前为止,在我找到的基本Django教程和文档中,应用程序被视为项目的一些独立部分。 不过,我还没有找到在复杂项目中同时使用它们的解决方案 我们可以在某个url域/signup上注册,它由用户处理。views.signup 对于GET请求,signup呈现signup.html 对于POST请求,在评估发布的数据之后,它 使用一些消息呈现signup.html,或注册新用户, 让他/她登录并重定向到某个地方 我们可以在domain/new\u post(或domain/user/new\u

到目前为止,在我找到的基本Django教程和文档中,应用程序被视为项目的一些独立部分。 不过,我还没有找到在复杂项目中同时使用它们的解决方案

我们可以在某个url
域/signup
上注册,它由
用户处理。views.signup

  • 对于GET请求,
    signup
    呈现
    signup.html
  • 对于POST请求,在评估发布的数据之后,它 使用一些消息呈现
    signup.html
    ,或注册新用户, 让他/她登录并重定向到某个地方
我们可以在
domain/new\u post
(或
domain/user/new\u post
)创建一个新帖子,由
posts.views.new\u post
处理。它的作用类似于
注册
处理程序:

  • 对于GET请求,它呈现
    new\u post.html
  • 对于POST请求,它计算POST数据,然后呈现
    new_post.html
    包含消息或注册新帖子并重定向 某处

一个通用网站由多个应用程序组成,在某个url上为请求显示的网页提供了多个应用程序的功能。
例如,登录到一些流行的社交网站后,我们可以在墙上创建新条目,搜索用户(通常是更广泛的搜索,但为了简单起见,让我们只与用户打交道),广告和我们的朋友也可能会列在侧边栏中。

这些部分是如何从不同应用程序的不同视图和模板构建的?
为了使问题更加具体:

  • 对于在某个url收到的GET请求,我们如何显示 用户搜索表单、新帖子表单和好友列表一起使用?

    如果我们通过一些项目级通用视图来实现,那么应用程序级视图呢?
    我已经读到,
    {%include%}
    标记对于从多个“子模板”构建模板非常方便,但是包含的模板所采用的不同变量又如何呢
  • 我们如何处理与用户搜索相关的GET请求,以及可能从同一url发送的与帖子相关的新帖子请求?
    (表达“从url发送的请求”可能不合适,但用户可以通过在一个特定url上显示的页面上执行操作来发送不同的请求。)
  • 此外,不同的组件应保持解耦
注意:这个问题可能太笼统了,所以除了详细的答案之外,我还希望你能提供一些信息来源,可能还有“在行动中”一起使用不同应用程序的例子

对于在某个url收到的GET请求,我们如何显示 用户搜索表单、新帖子表单和好友列表一起

可以从任何视图请求渲染任何模板。Django将通过每个注册的应用程序在
模板
目录中搜索模板。或者您可以使用
template\u DIR
指定自己的模板目录,但似乎您已经从下一个问题中了解到了这一点


如果我们通过某个项目级通用视图来实现这一点,那么 应用程序级视图

你能试着更深入地解释这个问题吗

我已经读到,{%include%}标记对于构建模板很方便 从几个“子模板”,但不同的变量呢 包含的模板需要多少时间

从:

包含的模板将与模板的上下文一起呈现 包括在内

如果您有一个部分模板,用于包括,例如:

# hello.html
<h2>Hello {{ person.name }}</h2>
输出将是
Hello
,因为您在模板上下文中没有
person

我不太明白你的第二个要点。django包只是一个python包。如果您有两个应用程序,您可以选择任何方式导入代码,从两个不同的应用程序导入模块

例如,在大多数项目中,我最终拥有了一个
common
应用程序。这通常包含整个django项目中使用的实用程序。它通常包含我的基本测试类

在你的应用中,你可以直接导入

从yourproject.common.utils导入函数

为了帮助实现解耦,django提供了一个框架。你的应用程序可以发射和接收信号

Django包括一个“信号分配器”,它有助于实现解耦 当操作发生在应用程序中的其他位置时,应用程序会收到通知 框架简而言之,信号允许某些发送者通知用户 已发生某些操作的接收器集。他们特别 当许多代码可能对同一事件感兴趣时,此功能非常有用


“如果我们通过某个项目级通用视图执行此操作,那么应用程序级视图如何?”-->在应用程序“posts”中,我们定义了一个create_post()视图,该视图使用可选上下文变量error_msg呈现post_form.html。如果某些验证失败,则在create_post()中定义此错误。如果我从应用程序的create_post()以外的视图呈现post_form.html,我还需要在该视图中进行验证,否则模板将永远不会得到错误消息变量。为什么我要从其他视图呈现
post_form.html
?当我在项目中使用应用程序时,例如在社交博客中,用户帐户将由
user\u account()
view处理。我想将呈现的
post_表单
放在用户帐户页面的某些部分,例如侧边栏中。至于第二个要点。。我向
www.mysite.com/myaccount/
发送GET请求。相关视图(比如
myaccount()
)返回一个包含两个表单html元素的页面:
user\u search
new\u post
。第一个将在
用户
应用程序上运行,第二个将在
帖子
应用程序上运行。作为
myaccount()
,我应该应用什么视图?我应该在两个应用中的一个中定义它吗;还是在第三个应用程序中?这张照片怎么办
# greeting.html
{% include 'hello.html' %}


render_to_response('greeting.html', {})