1

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

我们可以在某个 url 上注册domain/signup,它由users.views.signup.

  • 对于 GET 请求signup呈现signup.html.
  • 对于 POST 请求,在评估发布的数据后,它要么呈现signup.html 一些消息,要么注册一个新用户,将他/她登录并重定向到某个地方。

我们可以在domain/new_post(或domain/user/new_post)创建一个新帖子,由 处理posts.views.new_post。它的行为类似于signup处理程序:

  • 对于 GET 请求,它呈现new_post.html.
  • 对于 POST 请求,它评估发布数据,然后 new_post.html使用消息呈现或注册新帖子并重定向到某个地方。


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

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

  • 对于在某个 url 收到的 GET 请求,我们如何将 user-search-form、new-post-form 和 friends-list 一起显示?
    如果我们通过一些项目级别的通用视图来做到这一点,那么应用级别的视图呢?
    我已经读到该{% include %}标签对于从几个“子模板”构建模板很方便,但是包含的模板所采用的不同变量呢?
  • 我们如何处理与用户搜索相关的 GET 请求,以及可能从同一 url 发送的与新帖子相关的 POST 请求?
    (“从 url 发送的请求”的表述可能不恰当,但用户可以通过对显示在一个特定 url 的页面进行操作来发送不同的请求。)
  • 此外,不同的组件应该保持解耦。

注意:这个问题对于 SO 来说可能太笼统了,所以除了详细的答案之外,我还希望得到资源,可能会提供“实际”使用不同应用程序的示例。

4

1 回答 1

0

对于在某个 url 收到的 GET 请求,我们如何将 user-search-form、new-post-form 和 friends-list 一起显示?

您可以请求从任何视图呈现任何模板。Django 将在每个注册的应用程序中搜索模板以查找template目录。或者您可以使用 指定您自己的模板目录TEMPLATE_DIR,但您似乎已经从下一个问题中知道了这一点......

如果我们通过一些项目级别的通用视图来做到这一点,那么应用级别的视图呢?

您能否尝试更深入地解释这个问题?

我已经读到 {% include %} 标签对于从几个“子模板”构建模板很方便,但是包含的模板所采用的不同变量呢?

文档

包含的模板是使用包含它的模板的上下文呈现的。

如果您有一个部分模板,旨在包括,例如:

# hello.html
<h2>Hello {{ person.name }}</h2>

另一个模板包括它:

# greeting.html
{% include 'hello.html' %}


render_to_response('greeting.html', {})

输出将是Hello因为您person在模板上下文中没有

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

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

在您的应用程序中,您只需导入

from yourproject.common.utils import a_function

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

Django 包含一个“信号调度器”,当框架中的其他地方发生动作时,它可以帮助解耦的应用程序得到通知。简而言之,信号允许某些发送者通知一组接收者某些动作已经发生。当许多代码段可能对相同的事件感兴趣时,它们特别有用。

于 2013-03-12T23:44:56.860 回答