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

时间:2013-03-12 21:14:29

标签: django django-templates django-views django-apps

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

我们可以在某个网址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带有消息或注册新帖子并重定向 某处。


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

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

  • 对于某个网址收到的GET请求,我们如何显示 用户搜索表单,新帖子和朋友列表在一起?
    如果我们通过一些项目级别的常见视图来做到这一点,那么app级别的视图呢? 我已经读过{% include %}标签对于从几个“子模板”构建模板很方便,但是所包含的模板采用的不同变量呢?
  • 我们如何处理与用户搜索相关的GET请求以及可能从同一网址发送的与帖子相关的新POST请求?
    (表达“从网址发送的请求”可能不合适,但用户可以通过在一个特定网址上显示的页面进行操作来发送不同的请求。)
  • 此外,不同组件应保持分离。

注意:这个问题对于SO来说可能过于通用了,所以我也很感激来源,可能还有“在行动中”使用不同应用程序的例子。

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

请您尝试更深入地解释这个问题吗?

  

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

来自docs

  

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

如果你有一个部分模板,打算包括,如:

# 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提供了一个signals框架。您的应用可以发出和接收信号。

  

Django包含一个“信号调度程序”,它有助于解耦   当动作发生在其他地方时,应用程序会收到通   框架。简而言之,信号允许某些发件人通知   已经发生了一些行为的接收器集。他们特别   当许多代码可能对同一事件感兴趣时很有用。