如何在不创建视图的情况下在djangoCMS中使用模型(DB)数据?

时间:2015-07-24 10:47:41

标签: django django-models django-cms

我认为我的问题非常明确:

我有兴趣找到一些使用模型(DB)数据而不创建视图的方法。

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

我知道this project但这并不像我需要的那样直截了当(这对我来说非常复杂)。

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

2 个答案:

答案 0 :(得分:2)

在Django中,基本上无法从模型中获取数据到模板而没有将其放在那里的视图。这就是整个观点。

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

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

答案 1 :(得分:1)

你可以做的是创建一个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例外。