Djangocms中的自定义视图?
我还没有找到一个满意的方法来解决这个问题:我有一个正常工作的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()})
非常感谢
1 个回答
6
你可以把一个自定义的应用程序实例连接到任何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。
希望这能帮助你入门。