关于flask中的jinjia2模版中“for”语句在本地端正常使用,在服务器端会顺序混乱执行


#1

jinjia2 模版代码如下

{% for dia in dir %}
    <li><a href="{{ dir[dia] }}">{{ dia }}</a></li>
{% endfor %}

其中dir为字典

    Dir = {
        '课程体系介绍': '',
        'LogiSim工具': '/File/logisim',
        'Verilog语法': '/File/verilog',
        'FPGA原理': '/File/fpga',
        'Nexys4DDR开发板': '/File/IO',
        'Vivado安装及使用': '/File/vivado',
        'TestBench编写及仿真': '/File/testbench',
        '基本逻辑门(与、或、非、异或等)': '/File/basic',
        '简单组合逻辑电路(如选择器、译码器、加法器)': '/File/SLC',
        '复杂组合逻辑电路(如多位全加器等)': '/File/CLC',
        '简单时序逻辑电路(锁存器、触发器等)': '/File/STC',
        '复杂时序逻辑电路(如计数器、秒表等)': '/File/CT',
        '存储器': '/File/memory',
        '有限状态机': '/File/FSM',
    }

我在本地运行时顺序为正常:

课程体系介绍
LogiSim工具
Verilog语法
FPGA原理
Nexys4DDR开发板
Vivado安装及使用
TestBench编写及仿真
基本逻辑门(与、或、非、异或等)
简单组合逻辑电路(如选择器、译码器、加法器)
复杂组合逻辑电路(如多位全加器等)
简单时序逻辑电路(锁存器、触发器等)
复杂时序逻辑电路(如计数器、秒表等)
存储器
有限状态机

但是我放在阿里云主机上运行时,每次运行其dir的顺序都不同:
一次:

有限状态机
课程体系介绍
基本逻辑门(与、或、非、异或等)
存储器
FPGA原理
LogiSim工具
简单时序逻辑电路(锁存器、触发器等)
TestBench编写及仿真
Nexys4DDR开发板
简单组合逻辑电路(如选择器、译码器、加法器)
复杂组合逻辑电路(如多位全加器等)
Verilog语法
Vivado安装及使用
复杂时序逻辑电路(如计数器、秒表等)

第二次重新启动:

基本逻辑门(与、或、非、异或等)
复杂时序逻辑电路(如计数器、秒表等)
LogiSim工具
简单时序逻辑电路(锁存器、触发器等)
存储器
Vivado安装及使用
课程体系介绍
FPGA原理
TestBench编写及仿真
复杂组合逻辑电路(如多位全加器等)
有限状态机
简单组合逻辑电路(如选择器、译码器、加法器)
Verilog语法
Nexys4DDR开发板

#2

应该和jinja2的for语句无关。

Python3.6以上,原生dict类型可以按key有序排序。Python3.5则还是乱序。

不知道你服务器端Python的版本?

可以使用collections.OrderedDict兼容。


#3

非常感谢你的回复!现已用list替代dict结构,我服务器上的python版本是2.x,竟没想到会有如此大的不同。