【问题标题】:How can I use model (DB) data in djangoCMS, without creating views?如何在 djangoCMS 中使用模型(DB)数据,而不创建视图?
【发布时间】:2015-07-24 10:47:41
【问题描述】:

我想我的问题很清楚:

我有兴趣找出一些在不创建视图的情况下使用模型 (DB) 数据的方法。

我已经使用 djangocms 创建了一个网站,现在我想开发一个小博客。

我知道this project,但这并不像我需要的那么简单(就我的目的而言,它相当复杂)。

例如,首先,我想知道是否有可能创建一个基本模板,在该模板中我可以直接从数据库中显示用户(他们的姓名)。

【问题讨论】:

  • 这其实是个好问题。我也希望看到一个很好的答案

标签: django django-models django-cms


【解决方案1】:

在 Django 中,您基本上无法在没有视图的情况下将数据从模型获取到模板。这就是全部观点。

您不一定非要创建一个views.py 文件,因为您可能还可以使用其他机制,例如 django CMS 的插件系统。

我不明白你的问题与开发博客有什么联系。

【讨论】:

  • 您能否改进您的答案,以便它显示如何使用 django CMS 插件直接从数据库中显示用户?或者至少推荐一些插件。
【解决方案2】:

你可以做的是创建一个context processor,它本质上是一个返回字典的函数,它被添加到每个请求上下文中。

例如,我有一个模型,它为整个网站提供信息,例如社交链接、名称等。看看;

from django.contrib.sites.models import get_current_site

from .models import SiteSettings


def site_settings(request):
    current_site = get_current_site(request)

    try:
        settings = SiteSettings.objects.get(site_id=current_site.id)

    except SiteSettings.MultipleObjectsReturned:
        settings = SiteSettings.objects.filter(
            site_id=current_site.id
        ).order_by('id')[0]

    except SiteSettings.DoesNotExist:
        return {
            'SITE_SITE_NAME': None,
            'SITE_SHORT_NAME': None,
        }

    # SiteSettings object exists, so assign the attributes you want, to context 
    # variables returned by the context processor for all views.
    data = {
        'SITE_SITE_NAME': settings.site_name,
        'SITE_SHORT_NAME': settings.short_name,
    }

    return data

因此,通过这样做,您可以在任何模板中使用 {{ SITE_SHORT_NAME }} 之类的内容,这显然使您保存在表格中的任何信息都可以通过这些处理器之一使用。只需确保在对模型执行此操作时创建必要的 DoesNotExist 异常即可。

【讨论】:

  • 谢谢。不过我有一个问题:“这会让我避免使用视图吗?”。你也可以在你的代码旁边放一些 cmets 吗?感谢@marksweb
  • '为了避免使用视图'听起来有点混乱。您究竟想在哪里使用这些数据?我假设您的意思是您希望数据可用,而无需在视图中专门创建它。
  • 你是对的。我正是这个意思。更多,你怎么看render_model。这也符合我的需要吗?
  • 啊,我明白了,就 CMS 的细节而言,您始终可以包含该模板标签以获取模型属性,但您仍然需要将模型实例传递给视图才能使其工作。请参阅文档; django-cms.readthedocs.org/en/latest/reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 2011-09-21
相关资源
最近更新 更多