Jinja2 有什么办法获得 block 的内容?

2016-04-30 15:11:13 +08:00
 vJianZhen

在用 Flask 框架做开发。

比方说有,{% block titile %}Hello, 我的!{% endblock %}

有什么方法可以得到名为 title 的 block 中的内容『 Hello, 我的!』吗?

4650 次点击
所在节点    Python
16 条回复
pimin
2016-04-30 16:47:41 +08:00
同一个模板内 self.title()
要是继承之类, super()

感觉楼主这个需求没有什么意义吧
ayaseangle
2016-04-30 16:55:24 +08:00
xy-problem
vJianZhen
2016-04-30 17:16:42 +08:00
有吗?
@ayaseangle
没有啊!就是想得到 block 里的内容。
pimin
2016-04-30 17:21:50 +08:00
@vJianZhen
你问题确实描述得不好
vJianZhen
2016-04-30 17:22:45 +08:00
嗯,我再补充下问题吧。这个问题的需求相当于存书签,是网站内的『标记页面』功能。在页面上放一个『标记此页面』的链接,为了标记成功,需要向 route 传参,一个是 URL ,另一个是页面标题,所以想说获得 block 里面的内容。当请求给到处理函数中,又函数负责将这些信息存到数据库,完成标记。
@ayaseangle
vJianZhen
2016-04-30 17:23:28 +08:00
@pimin 需要哪里再改进么?
pimin
2016-04-30 17:35:37 +08:00
@vJianZhen
你获得页面标题和 URL 这种工作,不应该考虑在模板内完成.
而是在前端完成.
vJianZhen
2016-04-30 17:35:58 +08:00
jinja2.exceptions.UndefinedError: 'jinja2.runtime.TemplateReference object' has no attribute 'titile'

@pimin
vJianZhen
2016-04-30 17:38:48 +08:00
现在是前端给后端传参,参数只能靠前端获得嘛。
@pimin
pimin
2016-04-30 18:00:18 +08:00
@vJianZhen
具体到 URL 和 TITLE 可以不靠前端的,比如前端可以给你发送一个神秘代码, 12345678 ,服务器知道 12345678 对应的是 12345678.html ,这个页面的标题是通过 ID 为 12345678 的文章生成的,它应该是文章.title+网站名称生成的,它应该是:“天大地大我最大”+“--------全球最大吹牛网”
同样的, 12345678 这个代码还是要客户端发给你。
在你这个例子里,你是不是多做了很多没有必要的工作。
你直接发送 URL 和 TITLE 然后存到数据库里,是不是最简单的方案。
vJianZhen
2016-04-30 18:17:49 +08:00
文章页面的标题也许你可以找到对应关系,但是很多网页的标题不是可以通过『规则』知道的。我不知道我做了什么不必要的工作,还请明示。我就是想直接发送 URL 和 TITLE 然后存到数据库里,现在 TITLE 不知道要怎么能通过 Jinja2 获取到。
@pimin
pimin
2016-04-30 18:38:24 +08:00

vJianZhen
2016-04-30 18:42:33 +08:00
@pimin 我的失误。我服你,感谢你。
pimin
2016-04-30 18:50:07 +08:00
@vJianZhen
虽然这样也能用,还是建议标题和 URL 通过 JavaScript 来获取,然后提交.
反正要做好的交互,肯定要用 AJAX,不可能点一下收藏就刷新页面吧
直接写一个获取当前页面并提交的 JavaScript,放到所有页面都可以运行得很好.
js 之类的静态资源可以放到 cdn 之类,降低服务器压力.
vJianZhen
2016-04-30 19:19:21 +08:00
@pimin [cry.jpg]现在还真是点一下就刷新,因为我不会 AJAX ,打算以后再学。这个项目不是商用的,是我毕业设计的项目。谢谢你的建议。
shsfoolish
2016-05-01 07:53:32 +08:00
赞同 @pimin jinjia 到了页面前端就已经是生成好的 html 了,只要用 javascript 就可以获取

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/275505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX