2013-03-13 88 views
2

是否有任何方法從另一個Django應用程序中的視圖渲染django-cms頁面並使用修改的上下文?從其他Django應用程序渲染Django-cms頁面

...我知道「django-cms方式」是通過插件和鉤子將您的其他應用程序集成到django-cms中。但我想反過來這樣做,因爲這對我來說更有意義,並且更容易重用應用程序,並且我沒有找到有關如何執行此操作的文檔。應該有一個簡單的方法來從我的視圖中調用django-cms視圖,並執行一些「巫術」來使其工作,對吧?

+0

我有點困惑,爲什麼你想打電話給我從'我的看法'的'Django-CMS視圖'。你試圖完成什麼?這句話特別令人困惑:「應該有一種簡單的方法來從我的角度調用django-cms視圖,並且做一些」巫術「來使它工作,對嗎?」我無法想象自己從另一個視圖中調用視圖的時間... – respondcreate

+0

@respondcreate我真正需要的是「從另一個Django應用程序中的視圖呈現django-cms頁面」,因爲我說過。如果有這樣的API,那很好,這是我希望有人知道的......如果沒有,那麼即使是從我的角度來說,調用django-cms視圖這種醜陋的方式也是好的......我'我使用新的webapp時完成了從視圖中調用視圖類型的東西我還沒有時間理解,並且必須儘快完成一個功能,然後在我明白事情是如何建立的時候進行重構。 – NeuronQ

回答

1

我過去解決這個問題的方法是使用urllib2(或請求)對URL進行get請求,並從響應中提取相關的部分。

... 
site = Site.objects.get_current() 
protocol = 'http' if DEBUG else 'https' 
response = urllib2.urlopen('%s://%s%s' % (protocol, 
    site.domain, page.get_absolute_url())) # page is a Django-CMS page object 
html_content = response.read() 
response.close() 
... 

在Django-CMS每個page對象都有一個.get_absolute_url()方法,所以這就是我得到了URL以編程的要求,但據我所知,Django-CMS API沒有渲染頁面的方法。

如果有不同的/更好的方法來做到這一點,我很想看看它是什麼。

3
from cms.views import details 

def show_some_page(request): 
    return details(request, 'slug_of_page_to_show') 
+1

爲什麼downvote?這是一個非常好的主意。 @NeuronQ需要的醜陋的黑客將把所需的上下文變量放入請求變量中。 –