【问题标题】:Django CMS : How to get placeholder html content?Django CMS:如何获取占位符 html 内容?
【发布时间】:2014-10-13 09:51:10
【问题描述】:

型号: 从 cms.models.fields 导入 PlaceholderField

MyModel(models.Model)
    title = models.CharField(max_length=255)
    placeholder = PlaceholderField('my_model')

我想检索变量中的占位符 html 内容,类似这样:

MyModel.objects.get(id=1).placeholder.get_html_content()

怎么做?

【问题讨论】:

  • 您需要模板中的变量吗?如果是这样,有一个template tag in django-cms 3 called render_placeholder 可以让您轻松地将占位符的内容分配给一个变量:{% render_placeholder mymodel_instance.my_placeholder as placeholder_content %}
  • 不,我需要它在“python”端

标签: django-cms


【解决方案1】:

这样的事情应该可以工作!

假设您可以访问request 对象:

from django.template import RequestContext

from cms.plugin_rendering import render_placeholder


obj = MyModel.objects.get(id=1)
html = render_placeholder(obj.placeholder, RequestContext(request))

如果你无权访问request对象,你可以使用RequestFactory来模拟request对象

from django.conf import settings
from django.contrib.auth.models import AnonymousUser
from django.test.client import RequestFactory


def get_request(language=None):
    request_factory = RequestFactory()
    request = request_factory.get('/')
    request.session = {}
    request.LANGUAGE_CODE = language or settings.LANGUAGE_CODE

    # Needed for plugin rendering.
    request.current_page = None
    request.user = AnonymousUser()
    return request

【讨论】:

  • 效果很好。只是缺少这个导入: from django.contrib.auth.models import AnonymousUser
  • 谢谢!更新答案!
  • 我评论这个答案是因为人们可能会在谷歌上找到它,这是一个更新的答案:docs.django-cms.org/en/develop/upgrade/…
猜你喜欢
  • 2012-04-21
  • 2013-09-07
  • 1970-01-01
  • 2014-08-31
  • 2013-07-31
  • 2017-12-24
  • 2013-10-08
  • 2012-11-02
  • 2013-08-25
相关资源
最近更新 更多