整理我遇到的 Python 的疑难问题

1 如果字典里一个键指向一个实例,深拷贝会拷贝出一个新的实例吗?

不会:

class foo:
    def __init__(self):
        print('do init foo')
        
a = {'cls': foo()}
a
# -------------------
do init foo
{'cls': <__main__.foo at 0x7fd18a246590>}
# -------------------
import copy;
b = copy.deepcopy(a)
# -------------------
b
{'cls': <__main__.foo at 0x7fd18a247a50>}

2 jinja2 怎么不转意的输出 html

目标是把下图中 <h2>内容正常 extend 到 html里面。

在 jinja 变量后面加个 safe 即可:

        {{ post.content.get('html')|safe }}

ref: https://flask.palletsprojects.com/en/2.2.x/templating/#controlling-autoescaping

3 多个装饰器时的顺序问题

比如自定义了一个多线程装饰器 async_exc:

def async_exc(func):
    def wrap(*args, **kwargs):
        Thread(target=func, args=args, kwargs=kwargs).start()

    return wrap

它和staticmethod一起装饰一个函数时,要把staticmethod放到最外面。

4 flask jinja2 模板里面有哪些环境变量?

jinja2 variable in flask:
ref: https://flask.palletsprojects.com/en/2.2.x/templating/#standard-context
我的需求是第一次访问 web 时,设置这个 site config,然后把这个配置显示到 jinja2 模板里

app = Flask(__name__)
app.secret_key = getenv('DETA_PROJECT_KEY')
app.config['site_info'] = db.get('site_info')

@app.route('/', methods=["GET"])
def index():
    if not app.config['site_info']:
        return redirect(url_for('setup'))
posted @ 2023-02-05 14:29  Jneeee  阅读(20)  评论(0编辑  收藏  举报