Flask 动态导航条

问题一:

Flask配合jinja2模板怎样去制作动态的导航条?

nav_sql

字段 作用
id 主键
name 名字
body 内容

其实也就是为Flask扩展一个单页面访问功能,
但访问的方式是从网站顶部导航条进行的访问,并且动态增减.
目前能想到的就是在任何路由中都添加一条查nav_sql,然后render_template静态html时传参,但这样做的话,几乎每一部访问都要查询一次nav_sql.
有没有更简单的方法?

问题二:

就上面的问题,把导航条动态的输出到html里之后,需要访问链接吧???
以id作为访问关键词的话,例http://localhost/page/1 就是访问nav_sql里字段为1的单页
那我怎样去设计才能是http://localhost/page/zidingyi,通过这样的url方式去访问nav_sql id为1的单页内容呢?
这里我想到了为nav_sql再创建一个单独的字段,后端根据前台get请求的字段去匹配数据库是否存在,但如果是这样,怎样通过url_for在html生成链接呢?

感谢各位忙住.感谢!

阅读 6.8k
4 个回答

把你的这些数据缓存起来,当表有更新时同时更新缓存,这样数据每次都从内存加载,不需要每次都去数据库查询

我也想过这个问题。 想到的是这样 把导航栏目 转换成 拼音 存储在一个字段 然后 获取这个字段判断指定内容

推荐使用Pjax

帖子过去好久了,我最近也遇到了同样的问题,但是帖子下并没有很好的解决方案
我就把我的方法说一下,也许能给后来人一些启发
解决的关键是flask中的全局函数
在__init__.py文件中定义一个方法

def create_app(conf):
    app = Flask(__name__, static_folder="static", template_folder="templates", instance_relative_config=True)
    app.config.from_object(conf)
    app.config.from_pyfile('config.py')
    Bootstrap(app)
    from .views import tag
    from .views import navigation
    app.register_blueprint(tag)
    app.register_blueprint(navigation)
    app.add_template_global(get_navs,'get_navs') # 注册模板全局函数

    return app


from .models import *
def get_navs():
    navs = Navigation.query.all()
    return navs

然后在父模板中使用该函数就可以

{% for nav in get_navs() %}
    <li class="navbar-btn" role="presentation"><a href="{{ url_for('navigation.get_nav_by_id', id=nav.nav_id) }}">{{ nav.nav_name }}</a></li>
{% endfor %}

蓝图中也同样提供了该方法,也提供了对应的装饰器,请参考:https://flask.palletsprojects...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏