4

これを行うための満足のいく方法が見つかりませんでした.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()})

どうもありがとう

4

1 に答える 1

6

カスタムアプリインスタンスを任意のDjango-CMSページにフックできます。その方法に関するドキュメントは次のとおりです。http://docs.django-cms.org/en/2.1.3/extending_cms/app_integration.html#app-hooksベースURLパターンを変更して具体的に変更する必要はありませ。 -ルート/あなたのビューに。

カスタムアプリフックが利用可能になる前に、私はあなたがテンプレートタグでやろうとしていることを成し遂げました。

それがあなたを助けることを願っています。

ファローアップ

さて、最近完成したサイトで、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を介してポートフォリオアプリのURLをDjango-CMSに提供しています。

それがあなたを動かすことを願っています。

于 2011-05-11T14:09:02.103 に答える