使用了nunjucks模板引擎后。希望能直接约定一个默认的layout文件,作为所有子页面默认继承的模板。
至少可以在config.default.js,可以配置所有页面的默认模板就更好了。
不然,大部分页面都需要写一个 extend,太令人悲伤了。
再次感谢。
这个跟你怎么用 nunjucks 有关,你完全可以写一个公共的 layout,在 layout 中 extend,然后再 include 你需要渲染的 page 。
layout
{% extend 'XXX' %}
{% block body %}
{% include __pageUrl__ %}
{% endblock %}
然后你 render 的时候,只需要指定 __pageUrl__ 即可。不需要每个页面都去 extend
thanks
@whxaxes 按您所说,其实还是需要在controller里面指定 pageUrl。已经很不错了,谢谢哈。
框架如果能做到如下几点,就更牛逼了:
1、让用户设置路由规则,而不是具体的路由。app启动后,根据路由规则和controller自动生成所有的路由。
2、controller里面渲染,默认就渲染view文件夹下面对应控制器名字文件夹下面的 控制器方法名相同的 模板文件。
这样就做到更好的 约定大于配置了。
仅仅建议,我也明白前端 模板碎片化严重,可能约定过于干涉用户自由。取舍,还看你们了。
@malun666 egg 提供了很灵活强大的插件机制。如果你觉得这样用起来更舒服,完全可以根据你自己的需求,基于 egg 来定制一套自己的框架哈。
已经开始自己写插件呢。谢谢了。
@whxaxes
其实你应该去 nunjucks 提
1、让用户设置路由规则,而不是具体的路由。app启动后,根据路由规则和controller自动生成所有的路由。
app.get('/admin', app.role.can('admin'), app.controller.admin.index) 这样带有前置条件的路由是如何描述,到了最后,Controller 里面就变为一个 json 了,那跟 router 有什么区别呢?也许未来支持注解后,才有更好的方案。其实还是需要在controller里面指定 pageUrl
2、controller里面渲染,默认就渲染view文件夹下面对应控制器名字文件夹下面的 控制器方法名相同的 模板文件。
- 这个你其实可以在
app/extend/context.js里面提供一个renderPage的方法,来做默认值。
Most helpful comment
这个跟你怎么用 nunjucks 有关,你完全可以写一个公共的 layout,在 layout 中 extend,然后再 include 你需要渲染的 page 。
layout
然后你 render 的时候,只需要指定 __pageUrl__ 即可。不需要每个页面都去 extend