我尝试在我的apphook
的上下文中添加我的ListView
的应用程序的查询集,但我无法获得查询集。我已经创建了两个模型我的ServicePLuginModel
和Service
模型。
class ServicePluginModel(CMSPlugin):
title = models.CharField(_('title'),
blank=True,
help_text='Service Widget',
max_length=64,
)
class Service(CMSPlugin):
# Attributes - Mandatory
title = models.CharField(_('title'),
max_length=200,
blank=False)
我创建了一个ListView
:
class ServiceListView(ListView):
model = Service
queryset = Service.objects.all()
def get_context_data(self, **kwargs):
context = super(ServiceListView).get_context_data(**kwargs)
queryset = Service.objects.all()
context["now"] = timezone.now()
context.update({'object_list': queryset})
context.update(kwargs)
return super().get_context_data(**context)
def render_to_response(self, context, **response_kwargs):
# Shim to affect the CMS Toolbar only
if self.request.toolbar and self.request.toolbar.edit_mode:
menu = self.request.toolbar.get_or_create_menu('service-list-menu', 'Services')
menu.add_break()
return super(ServiceListView, self).render_to_response(context, **response_kwargs)
urls.py
app_name = 'services'
urlpatterns = [
re_path('/', ServiceListView.as_view(), name='service-list'),
re_path(r'^(?P<slug>[\w-]+)/?$', ServiceDetailView.as_view(), name='service_detail'),
]
我的cms_plugins.py
@plugin_pool.register_plugin # register the plugin
class ServicePluginPublisher(CMSPluginBase):
model = ServicePluginModel # model where plugin data are saved
module = _("Services")
name = _("Service Plugin") # name of the plugin in the interface
cache = False
render_template = "services/service_list.html"
def render(self, context, instance, placeholder):
context.update({'instance': instance })
return context
cms_apps.py
:
@apphook_pool.register # register the application
class Servicesapphook(CMSApp):
app_name = "services"
name = "Services Application"
def get_urls(self, page=None, language=None, **kwargs):
return ["eldemmedya.apps.services.urls"]
我的service_list.html:
{% for service in object_list %}
<li>
<div class="cs_image_box cs_style_1">
<div class="cs_image_box_number cs_primary_color cs_primary_font cs_fs_38 cs_semibold">{{ service.service_number }}</div>
<a href="service-details.html" class="cs_image_box_img cs_radius_5 overflow-hidden">
<img src="{% static 'img/studio-agency/service_img_1.jpeg' %}" alt="Service">
</a>
<div class="cs_image_box_info position-relative">
<h2 class="cs_image_box_title cs_fs_29 cs_semibold"><a href="service-details.html">{{ service.title }}</a></h2>
<p class="cs_image_box_subtitle mb-0">{{ service.content }}</p>
<a href="service-details.html" class="cs_image_box_btn cs_center position-absolute rounded-circle">
<img src="{{ service.photo|thumbnail_url:'service_image'}}" alt="{{ service.title }}" class="rounded-6">
</a>
</div>
</div>
</li>
{% endfor %}
我无法将object_list添加到我的上下文。你能帮助我在哪里添加我的服务queryset
的上下文吗?
谢谢
1条答案
按热度按时间liwlm1x91#
因此,CMS插件(
CMSPlugin
的示例)可以在CMS页面上使用。但是当你创建应用钩子时,插件的处理方式就不同了。如果这些插件在其他页面上使用,并且您还希望将它们带入appook的页面,则需要在应用中创建模型示例,然后在模型上创建
PlaceholderField
。然后,您可以将这个模型示例呈现到一个页面上,并依次呈现占位符以显示附加的插件。CMS插件需要与占位符相关联。我想你会在你的常规CMS模板中看到这些,但是当使用appooks的时候,情况就有点不同了。在CMS之外的占位符上可以找到here。
这是一个非常复杂的应用程序,但它是如何实现django-cms功能的一个很好的例子。看看它的
PlaceholderField
实现在这里。在这里,您可以将博客添加到页面,然后创建帖子。然后通过PlaceholderField
将内容添加到帖子中,这样当你编辑时,它就像一个普通的页面,你可以添加你经常使用的所有插件。