【问题标题】:Django: How to integrate an app inside another appDjango:如何将一个应用程序集成到另一个应用程序中
【发布时间】:2013-04-18 11:49:21
【问题描述】:

我想知道我们如何从不同的应用程序中“调用”一个应用程序。 基本上,我有,例如:

  • 一个日历应用程序,它执行特定过程以在 html 中呈现日历
  • 显示网站 index.html 的“主要”应用程序

我希望主应用程序调用日历应用程序并在侧边栏中插入它呈现的内容。

例如,CodeIgniter 框架可以处理这个问题。一个控制器可以调用另一个控制器,将它返回的内容(html 输出)保存在一个变量中,最后将该变量包含在将用于呈现最终 html 文件的上下文中。

Django 有可能吗? 谢谢

【问题讨论】:

    标签: django templates view include


    【解决方案1】:

    好吧,我想我可能会找到解决方案。我是 Django 新手,所以我不知道这是否是一种好方法,是否违反了一些常规规则,是否打开了一些安全漏洞,或者简单地说,还有其他更好的方法,但无论如何,它有效...

    所以,我创建了我的应用程序 Calendar 和我的应用程序 Show。 我希望 Show 调用 Calendar,渲染其模板,然后将结果插入到 Show 的模板中。

    为此,我在日历端使用TemplateResponse 而不是HttpResponse

    # Calendar view
    
    from django.template.response import TemplateResponse
    
    def render_calendar(request):
        return TemplateResponse(request, 'calendar/calendar-template.html', {})
    

    然后在 Show 端,获取TemplateResponse 实例,调用其render() 方法,最后将rendered_content 插入到上下文中:

    # Show view
    
    from calendar import views
    
    def show(request, show_id):
        cal = views.render_calendar(request)
        cal.render()
        context = {"calendar": cal.rendered_content}
        return render_to_response("show/show-template.html", context)
    

    这就是诀窍!

    【讨论】:

      【解决方案2】:

      有点……

      有一个模板标签{% ssi %} 允许您将一个模板包含在另一个模板中,唯一的事情是您需要将另一个模板所需的所有上下文变量传递给父模板。

      【讨论】:

      • 是的 .. 问题是我的“side-apps”(类似小部件)非常独立,我不想在一个地方处理所有应用程序的所有变量。
      • 谢谢,我很感激
      • {% ssi %} 已被弃用。从 ~ v1.10 起不再可用。
      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      相关资源
      最近更新 更多