現在のディレクトリを取得
import os
cwd = os.getcwd()
print(cwd) # /Users/demo-user/documents/mydir
ディレクトリを変更
os.chdir('/Library')
cwd = os.getcwd()
print(cwd) # /Library
現在のディレクトリを取得
import os
cwd = os.getcwd()
print(cwd) # /Users/demo-user/documents/mydir
ディレクトリを変更
os.chdir('/Library')
cwd = os.getcwd()
print(cwd) # /Library
Apacheサーバーにあるファイルのリダイレクト設定です。
ファイル名に半角スペースや半角カッコがあっため 500 Internal Server Errorが発生してディレクトリにアクセスできなくなってしまいます。
.htaccess 最初の設定 *このままだと500エラーが発生
RewriteEngine On
Rewriterule ^abc xyz.pdf$ https://example.com/abcxyz/ [L, R=301]
Rewriterule ^abc(123)xyz.pdf$ https://example.com/abcxyz/ [L, R=301]
ファイル名をクオーテーションマーク " で囲い(^と$の外側に記述)、半角カッコはバックスラッシュ \ でエスケープが必要でした。
.htaccess 修正後
RewriteEngine On
Rewriterule "^abc xyz.pdf$" https://example.com/abcxyz/ [L, R=301]
Rewriterule "^abc\(123\)xyz.pdf$" https://example.com/abcxyz/ [L, R=301]
([\s\S\n]*?) または ([\s\S\n]⁺?)
\s
: 空白文字を表す。[ \t\n\r\f]
と同じ\S
: 非空白文字を表す。[ \t\n\r\f]
以外の一文字。\n
: 改行文字を表す。django-CMS (https://www.django-cms.org)
$ python manage.py cms check
を実行すると保存されておらずorphanedになったものが発見される場合がある。
以下を実行して削除する。
$ python manage.py cms list plugins
$ python manage.py cms delete-orphaned-plugins
def add_string():
string = ''
def add_string_inner(new_string):
nonlocal string
string += new_string
return string
return add_string_inner
messages = add_string()
print(messages('')) # 空白
print(messages('abc')) # abc
print(messages('123')) # abc123
print(messages('xyz')) # abc123xyz
readlines() ... テキストファイル内容を一気に読み込み、1行ずつリストにします。ファイルサイズがよほど大きくなければ通常はこれを使います。
readline() ... テキストファイルを1行ずつ読み込みます。すべての行に対する処理は少し工夫が要ります。
以下、TEST.txt の内容が、
あいうえお[改行]
[改行]
かきくけこ[改行]
さしすせそ
というものとします。
Youtube動画URL
https://www.youtube.com/watch?v=動画ID
120 × 90 [default]
http://img.youtube.com/vi/動画ID/default.jpg
120 × 90 [ 1 ]
http://img.youtube.com/vi/動画ID/1.jpg
120 × 90 [ 2 ]
http://img.youtube.com/vi/動画ID/2.jpg
120 × 90 [ 3 ]
http://img.youtube.com/vi/動画ID/3.jpg
320 × 180
http://img.youtube.com/vi/動画ID/mqdefault.jpg
480 × 360
http://img.youtube.com/vi/動画ID/hqdefault.jpg
640 × 480
http://img.youtube.com/vi/動画ID/sddefault.jpg
1280 × 720
http://img.youtube.com/vi/動画ID/maxresdefault.jpg
// 強制リロード
window.addEventListener('pageshow', function (event) {
if (event.persisted) {
// bfcache発動時の処理
window.location.reload();
}
});
その他、探したところ window.performance.navigation.type というものがあり、これを使うと意図通り動作しました。
window.addEventListener('pageshow', function(event) {
let flg=window.performance.navigation.type;
//flg=0が始めてきたとき、flg=1がリロードしたとき、flg=2がブラウザバックで戻ってきたとき
if (flg == 2) {
window.location.reload();
}
});
参考: ブラウザバック を検知したい
https://teratail.com/questions/312782
Amazon Linux2 または CentOS7上でDjangoをインストールして、「$ python manage.py migrate」すると以下のようなエラーが出ました。
django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher.
SQLiteのバージョンが古いということで、アップグレードしても同じようなエラーが出ます。
こちらのサイト https://stackoverflow.com/questions/66380006/django-deterministic-true-requires-sqlite-3-8-3-or-higher-upon-running-python によれば、以下のようにすればよいとのことでした。
まず、pysqlite3 と pysqlite3-binary をインストールします。(仮想環境です)
(venv)$ pip install pysqlite3
(venv)$ pip install pysqlite3-binary
そして、以下のbase.pyの一部を書き換えます。
venv/python3.9/site-packages/django/db/backends/sqlite3/base.py
# from sqlite3 import dbapi2 as Database # annotation
↓ 以下のようにします。
from pysqlite3 import dbapi2 as Database # import pysqlite3
再度 migrateし、ウェブサーバーを再起動したところ動作するようになりました。
<追記>上記でもまだ動かない(500エラー)場合(特にmod_wsgiを使う場合)
Apacheのエラーログを確認すると.../django/apps/registry.py の以下の部分でエラーになっている。
raise RuntimeError("populate() isn't reentrant")
このままだと原因が分からないので raise RuntimeError~をコメントアウトして代わりに
self.app_configs = {} を追加して実際のエラーを表示させます。
以下のエラーが確認できました。
.../django/db/backends/sqlite3/base.py", line 70, in check_sqlite_version
check_sqlite_version() が実行されて sqliteバージョンが3.9.0以降でないというエラーが出て止まっていました。
とりあえず対応として check_sqlite_version() をコメントアウトして実行しないようにするとDjangoが起動できました。
let cookie_arry = document.cookie.split('; ');
function getCookieValue(cookie_name) {
let cookie_arry = document.cookie.split('; ');
cookie_arry.forEach(function(value) {
var content = value.split('=');
if (content[0] == cookie_name){
return content[1]; //ここで終了せず、配列最後まで繰り返してしまう。
}
})
}
function getCookieValue(cookie_name) {
let cookie_arry = document.cookie.split('; ');
for (let value of cookie_arry) {
content = value.split('=');
if (content[0] == cookie_name){
return content[1];
}
}
}
getCookieValue('sessionid'); //⇒ undefined
Tabulatorで他のフィールド(セル)を参照して書き換える方法です。
formatterに getValue(), getData() を使用して関数を定義します。
cell.getValue() でフィールド自身の値を取得できます。
cell.getData() でフィールドを含む行のデータを取得できます。
cell.getData().[他のフィールド名] で他のフィールドの値を取得できます。
例
Wiki.jsで画像・ファイルをアップロードするときフォルダ作成ができますが、ブラウザ上で削除ができません。(2023年7月現在)
Wiki.jsをDockerでインストールしている場合のフォルダ削除方法メモです。
Dockerのdbイメージ(PostgleSQL)に入ります。
$ docker exec -it db /bin/bash
User: wiki、Database:wikiでPostgreにログインします。
root@db:/# psql -h 127.0.0.1 -p 5432 -U wiki -d wiki
以下のようにselectでテーブル一覧を表示します。
wiki=# select * from public."assetFolders";
id | name | slug | parentId
----+---------------+---------------+----------
1 | folder-user | folder-user |
2 | folder-common | folder-common |
3 | folder-admin | folder-admin |
(3 rows)
削除したいフォルダのid(以下の例では3)を指定してdeleteで削除します。
root@db:/# delete from public."assetFolders" where id=3;
Pythonでのクラスの定義を見ると古い情報では以下のように (object) が付いていることが多い。
class NewStyleClass(object):
Python2では、何も継承しないクラスを記述する場合に以下のように記述する。
class MyClass: または class MyClass():
そして、objectクラスを継承したクラスというものがあり、以下のように記述する。
class MyClass(object):
Python2では、この2つは区別される。
Python3では、この3つはすべてobjectクラスを継承したクラスとなるため、同じものになる。そのため、Python3では以下のように簡潔に記述すればよい。
class MyClass:
Djangoのテンプレートでクエリパラメータを表示したい場合です。
クエリ例1:https://example.com/?preview=ok&update=true&id=123
上記の例ようなクエリパラメータの場合、一つずつ取得するときは以下のようにします。
{{ request.GET.preview }} ⇒ ok
{{ request.GET.update }} ⇒ true
{{ request.GET.id }} ⇒ 123
一覧を表示したいときは以下のようにします。
{% for key, value in request.GET.items %}
<p>{{ key }}: {{ value }}</p>
{% endfor %}
表示結果
preview: ok
update: false
id: 123
注意点としては、以下のようにパラメータに重複がある場合です。
クエリ例2:https://example.com/?preview=ok&update=true&id=123&id=xyz
この場合、{{ request.GET }} は
<QueryDict: {'preview': ['ok'], 'update': ['true'], 'id': ['123', 'xyz']}></QueryDict:>
のようなQueryDictなのですが、
{{ request.GET.id }} は リスト ['123', 'xyz'] になるわけではなく、後ろの'xyz'しか取得できません。
{{ request.GET.id }} ⇒ xyz
DjangoでuserにUUIDフィールドを作ったので以下のようにテンプレートで条件判定しようとしたところ、同じUUID文字列のはずなのにどうしても一致しませんでした。
{% if "あるUUID文字列" == user.uuid %}
・・・・
{% endif %}
以下のように、uuidを文字列に変換しないといけませんでした。
{% if "あるUUID文字列" == user.uuid|stringformat:"s" %}
・・・・
{% endif %}
Ubuntu: 20 or 22
以下のコマンドで起動中のサービス一覧を表示した。
$ systemctl list-units --type=service
その中で fwupd-refresh.service というものが failed になっていたのでその解決方法です。
次のファイルに User=root を追記します。
/lib/systemd/system/fwupd-refresh.service
[Unit]
Description=Refresh fwupd metadata and update motd
Documentation=man:fwupdmgr(1)
After=network.target
[Service]
Type=oneshot
User=root
CacheDirectory=fwupdmgr
・・・・以下略・・・・
サービスを再起動します。
$ systemctl daemon-reload; service fwupd-refresh restart; service fwupd-refresh status
参考: https://askubuntu.com/questions/1415928/cannot-start-fwupd-refresh-service
$python manage.py shell
>>> from products.models import Product
>>> Product.objects.get(id=9)
<Product: レーザマシン>
>>> Product.objects.get(id=9).image
<FieldFile: products/product/9/photo1.jpg>
>>> Product.objects.get(id=9).image.name
'products/product/9/photo1.jpg'
>>> Product.objects.get(id=9).image.path
'/var/www/html/products/myproject/media/products/product/9/photo1.jpg'
参考
モデル (Model) - データアクセスの基礎 - Django 入門 - Python 入門
https://python.keicode.com/django/model-data-access-basics.php
以下の順に、updateとupgradeを実行します。
$ sudo apt-get update
$ sudo apt-get upgrade
※apt-get updateは、有効なインストール可能なパッケージの一覧を更新します。
※apt-get upgradeは、有効なパッケージ一覧を元にインストール済みパッケージの更新を行います。
参考 https://www.sejuku.net/blog/85434