【问题标题】:custom views within Djangocms?Djangocms 中的自定义视图?
【发布时间】:2011-08-23 07:49:30
【问题描述】:

我还没有找到令人满意的方法:我有一个运行良好的 djangocms 设置。但是我需要将 CMS 外部表格中的内容添加到我的主页并在模板上呈现该内容。我可以这样做,但是在 CMS 中编辑 urls.py 以使用我的视图,就像这样......

url(r'^', 'myapp.views.slideshow_info'),

... 从 CMS 中排除任何内容。我知道我只是让我的自定义视图来适应 CMS 的视图正在做什么,但是我该如何实现呢?

目前我的应用视图显示:

from myapp.models import model1, model2

def slideshow_info(request):
    return render_to_response('index.html', {'slideshow_list' : model1.objects.all()})

非常感谢

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    您可以将自定义应用程序实例挂接到任何 Django-CMS 页面。以下是有关如何执行此操作的文档:http://docs.django-cms.org/en/2.1.3/extending_cms/app_integration.html#app-hooks不应该需要更改基本 url 模式以专门将 / 重新路由到您的视图。

    在自定义应用程序挂钩可用之前,我将完成您尝试使用模板标签执行的操作。

    希望对你有所帮助。

    跟进

    好的,在一个最近完成的网站中,我不得不挂钩一个名为“portfolio”的应用,以在 Django-CMS 网站的主页上显示图像。

    以下是代码的相关部分:

    #portfolio/cms_app.py
    from django.utils.translation import ugettext_lazy as _
    
    from cms.app_base import CMSApp
    from cms.apphook_pool import apphook_pool
    
    class PortfolioAppHook(CMSApp):
        name = _('Portfolio')
        urls = ['portfolio.urls']
    
    apphook_pool.register(PortfolioAppHook)
    
    
    #portfolio/urls.py
    from django.conf.urls.defaults import *
    
    urlpatterns = patterns('portfolio.views',
        url(r'^(?P<slug>[-\w]+)/$', 'project_detail', name='project_detail'),
        url(r'^$', 'portfolio_index', name='portfolio_index'),
    )
    
    #portfolio/views.py
    from django.http import HttpResponseRedirect
    from django.contrib.auth.decorators import login_required
    from django.shortcuts import get_object_or_404, render
    
    from portfolio.models import Project
    
    
    def portfolio_index(request):
        project_objects = Project.for_public if request.user.is_anonymous() \
            else Project.objects
        projects = project_objects.all().select_related(depth=1)
        return render('portfolio/index.html',
            {'projects' : projects}, request)
    
    
    def project_detail(request, slug):
        project = get_object_or_404(Project, slug=slug)
        if not project.public and request.user.is_anonymous():
            return HttpResponseRedirect('/?login=true')
        return render('portfolio/project_detail.html',
            {'project' : project}, request)
    
    #urls.py (base urls)
    from django.conf import settings
    from django.conf.urls.defaults import *
    from django.contrib import admin
    
    from views import login_user, logout_user
    
    admin.autodiscover()
    
    urlpatterns = patterns('',
        (r'^admin/filebrowser/', include('filebrowser.urls')),
        (r'^admin/doc/', include('django.contrib.admindocs.urls')),
        (r'^admin/', include(admin.site.urls)),
        (r'^tinymce/', include('tinymce.urls')),
        url(r'^login/$', login_user, name='login_user'),
        url(r'^logout/$', logout_user, name='logout_user'),
        (r'^', include('sorl.thumbnail.urls')),
        (r'^', include('cms.urls')),
    )
    
    if settings.SERVE_STATIC_MEDIA:
        urlpatterns += patterns('',
            (r'^' + settings.MEDIA_URL.lstrip('/'), include('appmedia.urls')),
        ) + urlpatterns
    

    从这个工作示例中您可以看到,我没有更改基本 URL 以适应主页视图,而是通过 cms_app.py 将我的 Portfolio 应用程序的 URL 提供给 Django-CMS

    希望能助您一臂之力。

    【讨论】:

    • 感谢您的回答。它在一定程度上有所帮助,但是当我连接我的 django 应用程序的 urls.py 时,我似乎遇到了同样的问题,如下所示:
    • homepage.urlpatterns = [ url(r'^', 'myapp.views.slideshow_list'), ]
    • 我将在我的答案中添加一些额外的示例代码,以演示我如何将自定义应用程序连接到最近完成的网站的主页。
    • 感谢 Brandon 调查它。我以稍微不同的方式解决了这个问题:一旦我注意到我的应用程序的提要被呈现在该模板上的 cms 提要中,并研究了一些原因,我发现我的视图中缺少上下文处理器。像这样(我不知道如何在这些帖子上插入代码,抱歉): def def slideshow_info(request): return render_to_response('index.html', {'slideshow_list' : model1.objects.all()}, context_instance =RequestContext(request)).
    • 酷,很高兴你一切正常。 Django-CMS 开始工作可能有点脾气暴躁,但它为我节省了难以置信的时间。
    猜你喜欢
    • 2016-12-10
    • 2015-10-10
    • 2015-01-23
    • 2015-10-04
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多