如何在集成django-cms的django应用中避免硬编码模板名称?

3 投票
1 回答
1318 浏览
提问于 2025-04-16 14:51

我有一个自定义的联系表单应用程序,我想把它和django-cms结合起来。根据我的理解,我需要先把这个应用程序注册到django-cms里,然后在我的视图中,我需要返回一个RequestContext实例,而不是普通的上下文实例。所以在我的views.py文件里,我写了

return render_to_response('my_template.html',
                          {'form': form},
                          context_instance=RequestContext(request))

我不知道我是不是漏掉了什么,但我现在的问题是,我不想把模板名称my_template.html写死在代码里。相反,我希望使用我在添加新页面时设置的那个模板。所以我的问题是,有没有办法从托管这个应用程序的django-cms页面获取模板,还是说我必须把模板名称写死在代码里呢?

1 个回答

5

如果你的应用钩子是一个挂载在 / 上的单一视图,你可以直接使用 {% extends request.current_page.get_template %},不过这样在你应用的子页面上就不管用了。

为了在子页面上也能使用,你需要反向获取你应用的根视图,使用 cms.utils.page_resolver.get_page_from_request 并加上 use_path 参数来获取页面,然后在这个页面上调用 get_template,最后进行扩展。

撰写回答