Djangocms内的自定义视图? [英] custom views within Djangocms?
问题描述
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屋!