如何在django cms页面模板上显示django模型数据
How to display django model data on the django cms page template
我希望能够在 django cms 页面上使用我的外部应用程序数据。
我可以使用自定义插件数据,但不能使用来自普通 Django 应用程序的数据
我尝试创建视图来处理我的数据,但如何从 Django cms 页面调用此视图?
here 正是我要的,但他的解释很肤浅,答案中提供的 link 已不再使用。
这是我的模型:
class ExternalArticle(models.Model):
url = models.URLField()
source = models.CharField(
max_length=100,
help_text="Please supply the source of the article",
verbose_name="source of the article",
)
title = models.CharField(
max_length=250,
help_text="Please supply the title of the article",
verbose_name="title of the article",
)
class Meta:
ordering = ["-original_publication_date"]
def __str__(self):
return u"%s:%s" % (self.source[0:60], self.title[0:60])
我的模板有占位符
{% load cms_tags %}
{% block title %}{% page_attribute "page_title" %}{% endblock title %}
{% block content %}
<section class="section">
<div class="container">
<div class="row">
<!-- header-->
<div class="col-lg-12">
<div class="updates">
{% placeholder "header" %}
</div>
</div>
<!-- header end-->
</div> <!-- end row -->
但我不介意在模板的任何位置显示此数据(如果无法在占位符内显示)
我有一个在 Django cms 中使用的自定义页面。
我想显示以上数据是Django cms页面中的一个部分
如果这个模型是从 CMSPlugin
继承的,那将很容易,因为我可以在我的占位符
中使用自定义插件
我希望在模板中显示我的模型中的数据。
{% load cms_tags %}
<h1>{{ instance.poll.question }}</h1>
<form action="{% url polls.views.vote poll.id %}" method="post"> {% csrf_token %}
{% for choice in instance.poll.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>
您必须以某种方式将 ExternalArticle
与页面对象连接起来。例如
- 通过将
ExternalArticle
定义为 page extension
- 或
AppHook
- 或 - 低技术含量 - 在
ExternalArticle
模型上有一个 PageField
我通过执行以下操作实现了这一目标:
@plugin_pool.register_plugin
class ArticlesPluginPublisher(CMSPluginBase):
model = ArticlesPluginModel
name = _("Articles")
render_template = "article_plugin/articles.html"
cache = False
def render(self, context, instance, placeholder):
context = super(ArticlesPluginPublisher, self).render(
context, instance, placeholder
)
context.update(
{
"articles": Article.objects.order_by(
"-original_publication_date"
)
}
)
return context
插件模型(ArticlesPluginModel
)仅用于存储插件实例的配置。不是实际的文章。
然后渲染器只会将来自外部应用程序的相关文章添加到上下文中(Article
)
我希望能够在 django cms 页面上使用我的外部应用程序数据。 我可以使用自定义插件数据,但不能使用来自普通 Django 应用程序的数据
我尝试创建视图来处理我的数据,但如何从 Django cms 页面调用此视图? here 正是我要的,但他的解释很肤浅,答案中提供的 link 已不再使用。
这是我的模型:
class ExternalArticle(models.Model):
url = models.URLField()
source = models.CharField(
max_length=100,
help_text="Please supply the source of the article",
verbose_name="source of the article",
)
title = models.CharField(
max_length=250,
help_text="Please supply the title of the article",
verbose_name="title of the article",
)
class Meta:
ordering = ["-original_publication_date"]
def __str__(self):
return u"%s:%s" % (self.source[0:60], self.title[0:60])
我的模板有占位符
{% load cms_tags %}
{% block title %}{% page_attribute "page_title" %}{% endblock title %}
{% block content %}
<section class="section">
<div class="container">
<div class="row">
<!-- header-->
<div class="col-lg-12">
<div class="updates">
{% placeholder "header" %}
</div>
</div>
<!-- header end-->
</div> <!-- end row -->
但我不介意在模板的任何位置显示此数据(如果无法在占位符内显示)
我有一个在 Django cms 中使用的自定义页面。
我想显示以上数据是Django cms页面中的一个部分
如果这个模型是从 CMSPlugin
继承的,那将很容易,因为我可以在我的占位符
我希望在模板中显示我的模型中的数据。
{% load cms_tags %}
<h1>{{ instance.poll.question }}</h1>
<form action="{% url polls.views.vote poll.id %}" method="post"> {% csrf_token %}
{% for choice in instance.poll.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>
您必须以某种方式将 ExternalArticle
与页面对象连接起来。例如
- 通过将
ExternalArticle
定义为 page extension - 或
AppHook
- 或 - 低技术含量 - 在
ExternalArticle
模型上有一个PageField
我通过执行以下操作实现了这一目标:
@plugin_pool.register_plugin
class ArticlesPluginPublisher(CMSPluginBase):
model = ArticlesPluginModel
name = _("Articles")
render_template = "article_plugin/articles.html"
cache = False
def render(self, context, instance, placeholder):
context = super(ArticlesPluginPublisher, self).render(
context, instance, placeholder
)
context.update(
{
"articles": Article.objects.order_by(
"-original_publication_date"
)
}
)
return context
插件模型(ArticlesPluginModel
)仅用于存储插件实例的配置。不是实际的文章。
然后渲染器只会将来自外部应用程序的相关文章添加到上下文中(Article
)