V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
vJianZhen
V2EX  ›  Python

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

  •  
  •   vJianZhen · 2016-04-30 15:11:13 +08:00 · 4803 次点击
    这是一个创建于 3127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在用 Flask 框架做开发。

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

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

    16 条回复    2016-05-01 07:53:32 +08:00
    pimin
        1
    pimin  
       2016-04-30 16:47:41 +08:00 via Android   ❤️ 1
    同一个模板内 self.title()
    要是继承之类, super()

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

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

    vJianZhen
        13
    vJianZhen  
    OP
       2016-04-30 18:42:33 +08:00
    @pimin 我的失误。我服你,感谢你。
    pimin
        14
    pimin  
       2016-04-30 18:50:07 +08:00   ❤️ 1
    @vJianZhen
    虽然这样也能用,还是建议标题和 URL 通过 JavaScript 来获取,然后提交.
    反正要做好的交互,肯定要用 AJAX,不可能点一下收藏就刷新页面吧
    直接写一个获取当前页面并提交的 JavaScript,放到所有页面都可以运行得很好.
    js 之类的静态资源可以放到 cdn 之类,降低服务器压力.
    vJianZhen
        15
    vJianZhen  
    OP
       2016-04-30 19:19:21 +08:00
    @pimin [cry.jpg]现在还真是点一下就刷新,因为我不会 AJAX ,打算以后再学。这个项目不是商用的,是我毕业设计的项目。谢谢你的建议。
    shsfoolish
        16
    shsfoolish  
       2016-05-01 07:53:32 +08:00 via iPhone
    赞同 @pimin jinjia 到了页面前端就已经是生成好的 html 了,只要用 javascript 就可以获取
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3401 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:42 · PVG 12:42 · LAX 20:42 · JFK 23:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.