Djangocms内的自定义视图? [英] custom views within Djangocms?

查看:111
本文介绍了Djangocms内的自定义视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我没有找到一个令人满意的方法:我有一个djangocms设置正常工作。但是,我需要将CMS内的表格中的内容添加到我的主页,并将该内容呈现在模板上。我可以这样做,但是在CMS中编辑urls.py以使用我的视图,如此...

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

...排除CMS中的任何内容。我明白,我只是得到我的自定义视图,以适应CMS的观点正在做什么,但是如何实现?



在我的应用程序的观点说:来自myapp.models import model1,model2

def slideshow_info(request):




返回render_to_response ('index.html',{'slideshow_list':model1.objects.all()})

非常感谢

解决方案

您可以将自定义应用实例挂接到任何Django-CMS页面。以下是有关如何执行此操作的文档: http: //docs.django-cms.org/en/2.1.3/extending_cms/app_integration.html#app-hooks 您不应该需要将基本网址格式更改为特定的-route /您的视图。



在定制应用程序挂接可用之前,我将完成您尝试使用模板标签。



希望能帮助您。



跟进



好的,在最近完成的网站上,我不得不勾引一个名为投资组合的应用程序,在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> ; $ _ $','project_detail',name ='project_detail'),
url(r'^ $','portfolio_index',name ='portfolio_index'),


#portfo来自django.http import的lio / views.py
从django.contrib.auth.decorators导入httpResponseRedirect
导入login_required
from django.shortcuts import get_object_or_404,render

from投资组合模型导入项目


def portfolio_index(请求):
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},请求)


def project_detail(request,slug):
project = get_object_or_404(Project,slug = slug)
如果不是project.public和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.con f.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。 url')),
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')),


如果settings.SERVE_STATIC_MEDIA:
urlpatterns + = patterns('',
(r'^'+ settings.MEDIA_URL.lstrip('/'),include('appmedia.urls ')),
)+ urlpatterns

从这个工作示例可以看出,没有改变我的基地URL可以容纳主页视图,而是通过cms_app.py



将我的投资组合应用程序的URL提供给Django-CMS希望能让你走。 p>

I haven't found a satisfactory way of doing this: I have a djangocms setup that is working fine. But I need to add content from a table outside the CMS to my homepage and render that content on the template. I can do this, but editing the urls.py within CMS to use my views like so...

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

... excludes any content from CMS. I understand that I just get my custom views to accommodate what CMS' views is doing, but how do I achieve this?

at the moment my app's views says:

from myapp.models import model1, model2

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

Many thanks

解决方案

You can hook a custom app instance to any Django-CMS page. Here's the documentation on how to do so: http://docs.django-cms.org/en/2.1.3/extending_cms/app_integration.html#app-hooks You shouldn't need to alter the base url patterns to specifically re-route / to your view.

Before custom app-hooks were available, I would accomplish what you're trying to do with template tags.

Hope that helps you out.

Followup

Ok, in a recently completed site, I had to hook an app titled "portfolio" to display images on the home page of a Django-CMS site.

Here are the relevant portions of the code:

#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

As you can see from this working example, I haven't altered my base URLs to accommodate the home page view, rather I've provided the URLs for my Portfolio app to Django-CMS through cms_app.py

Hope that gets you going.

这篇关于Djangocms内的自定义视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆