【问题标题】:Render django-cms page from other Django app从其他 Django 应用程序渲染 django-cms 页面
【发布时间】:2013-03-13 13:04:38
【问题描述】:

有什么方法可以从另一个 Django 应用程序的视图中渲染一个 django-cms 页面,并使用修改后的上下文?

...我知道“django-cms 方式”是通过插件和挂钩将您的其他应用程序集成到 django-cms 中。但我想反过来做,因为这对我来说更有意义,并且更容易重用应用程序,我没有找到关于如何做到这一点的文档。应该有一种简单的方法可以从我的视图中调用 django-cms 视图并执行一些“巫术”来使其工作,对吧?

【问题讨论】:

  • 我有点困惑,为什么您要从我的角度调用“django-cms 视图”。您具体要完成什么?这句话特别令人困惑:“应该有一种简单的方法,只需从我的视图中调用一个 django-cms 视图并执行一些“巫毒”来使其工作,对吧?”我想不出我从另一个视图中调用视图的时间......
  • @respondcreate 正如我所说,我真正需要的是“从另一个 Django 应用程序的视图中渲染一个 django-cms 页面”。如果有这方面的 API,太好了,这就是我希望有人知道的……如果没有,那么即使是像从我的视图中调用 django-cms 视图这样丑陋的 hacky 方式也会很好……我在使用新的 web 应用程序时,我已经完成了 call-view-from-view 类型的事情,我还没有时间理解并且必须尽快使功能工作,然后在我弄清楚事情是如何设置的时候进行重构......

标签: django django-cms django-apps


【解决方案1】:
from cms.views import details

def show_some_page(request):
    return details(request, 'slug_of_page_to_show')

【讨论】:

  • 为什么投反对票?这真是个好主意。 @NeuronQ 想要的丑陋技巧是将所需的上下文变量放入请求变量中。
【解决方案2】:

我过去解决这个问题的方法是使用 urllib2(或请求)对 URL 进行获取请求,并从响应中提取相关部分。

...
site = Site.objects.get_current()
protocol = 'http' if DEBUG else 'https'
response = urllib2.urlopen('%s://%s%s' % (protocol,
    site.domain, page.get_absolute_url()))  # page is a Django-CMS page object
html_content = response.read()
response.close()
...

Django-CMS 中的每个 page 对象都有一个 .get_absolute_url() 方法,这就是我以编程方式获取 URL 以请求的方式,但据我所知,Django-CMS API 没有方法来呈现页面。

如果有其他/更好的方法可以做到这一点,我很想看看它是什么。

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2014-06-09
    • 2016-08-14
    • 1970-01-01
    • 2018-02-01
    • 2013-08-25
    • 1970-01-01
    • 2017-06-01
    • 2015-10-29
    相关资源
    最近更新 更多