整理我遇到的 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'))