VS2012 Professional版使っていれば、PTVSをインストール、
VS2012 express版でも別途shellをインストールすれば済む話じゃないかっという話だけど、
今回は自力でやってみる方法を選んでみた。
1.インストール
ironpython、easy_installなど必要なものを順次インストールしていく。
IronPython
http://ironpython.codeplex.com/easy_setup
http://peak.telecommunity.com/dist/ez_setup.py
2.環境変数に下記のパスを追加。
Path
C:\Program Files (x86)\IronPython 2.7\
C:\Program Files (x86)\IronPython 2.7\Scripts\
C:\Program Files (x86)\IronPython 2.7\Lib\
C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\
PythonHome
C:\Program Files (x86)\IronPython 2.7\
3.モジュールを入れる。
ipy64 Scripts\easy_install sqlite
ipy64 Scripts\easy_install django
4.このままだとunicodeエラーが発生するので、djangoにパッチをあてる。
https://bitbucket.org/jdhardy/django-ironpython/commits/b70eeacda60c
.\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\funcional
---95行目付近
- assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
+ assert (str is unicode) or not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
---
5.プロジェクト作成
ipy64 -X:FullFrames Scripts\django-admin.py startproject project_name
ipy64の引数「-X:FullFrames」これが入ってなくて一度つまづいた所である。
詳しくはipy64 -hで参照すること。
インターネット上にある断片化された情報を切り取って、リブログする。 主にソフトウェア、Ubuntu関連、CPUなど気になったニュース、また、日々の面白い出来事やニュースもリブログします。
2013年1月21日月曜日
2012年9月19日水曜日
djangoでjsonpを返す
クロスドメインでjsonデータのやり取りするアプリを開発していた時に
ブラウザからアクセスするとちゃんと返ってくるのに、
「$.getJSON」や「$.ajax」を使うとHTTPレスポンス200なのにエラーが返ってくる現象に出くわした。
しばらく悩んでたらajaxのポリシーでクロスドメインにアクセスするときはjsonpを使う必要があるようだった。
どういったものなのかというと、通常はjsonそのまま渡すのに対して、
jsonpは、queryに書かれたcallback名で囲ってapplication/javascriptで返すようになる。
実装方法は下にまとめてみた。
まずはjavascript側から
次にサーバ側(django)もjsonpに対応
ブラウザからアクセスするとちゃんと返ってくるのに、
「$.getJSON」や「$.ajax」を使うとHTTPレスポンス200なのにエラーが返ってくる現象に出くわした。
しばらく悩んでたらajaxのポリシーでクロスドメインにアクセスするときはjsonpを使う必要があるようだった。
どういったものなのかというと、通常はjsonそのまま渡すのに対して、
jsonpは、queryに書かれたcallback名で囲ってapplication/javascriptで返すようになる。
jsonの場合
http://127.0.0.1/sample/
{data1:1, data2:"hello"}
jsonpの場合
http://127.0.0.1/sample/?callback=jsonp_1234&_=2345
jsonp_12345({data1:1, data2:"hello"});
実装方法は下にまとめてみた。
まずはjavascript側から
$.getJSON('http://127.0.0.1/sample/?callback=?', function(data){console.dir(data);});
$.ajax({url:'http://127.0.0.1/sample/', dataType='jsonp', success: function(data){console.dir(data);});
次にサーバ側(django)もjsonpに対応
def JSONP(f):
"""
Usage:
@JSONP
def func(request):
dic = { 'data1': 1, 'data2': 'hello'}
return dic
"""
def _func(*args, **kwargs):
request = args[0]
callback = request.GET.get('callback', None)
dic = f(request)
ret = json.dumps(dic)
if callback is None:
ct = 'application/json'
else:
ret = '%s(%s);' % (callback, ret)
ct = 'application/javascript'
return HttpResponse(ret, mimetype=ct)
return _func
ラベル:
django
2012年8月31日金曜日
django + jquery mobileで組込みアプリを作る(準備編)
産業関係で未だにMS-DOSで動くシステムなどがありますが、
20年続いたシステムでもハードウェア面でメンテナンスが出来なくなって
最新のシステムに置き換える事例などがあるかと思います。
今から作るなら.NETを使って実装が王道だけど、今回はWindows、Linux両方で動く
Pythonを使った方法を考えてみました。
仕様イメージは組込み開発でWindowsやLinuxが動くパソコンを使って装置を動かすというもの。
パソコンに求められるものといえば、
・シリアルポートやLANを使う
・画面で運転状況を表示する
・リアルタイム制御を求める
この3点くらいだと思います。
どういったものを使えば出来るかというと、
1つ目、シリアルポートやLANは、pyserial、twistedなどを使うことで解決。
2つ目、最近の流れに沿って、スマートフォンで操作できるように、WEBアプリ開発でDjango、jQuery mobileを使えば対応できる。
3つ目、WEBフレームワークDjangoのバックグラウンドにハード制御を行うスレッド又はプロセスを常駐させることで対応できる。
今回はDjangoを使うので、管理画面が最初からついてきます。しかもデータ操作が可能なものです。
それを使えばパラメータ設定などはDjangoの機能を使えば簡単に出来るし、データベースをSqlite3に
すれば1ファイルで管理できるメリットずくめ。後はWEBサーバが必要になるのでnginxを使うとします。
ここまでの構成をまとめると、
nginx + django + jquery mobile + pyserial + twisted + sqlite3
だいぶ使うものが増えてきました。
[画面周り]
・ブラウザ経由(ネットワーク経由で遠隔操作なども可能)
・スマホ対応のライブラリjquery mobileを使うことで幅広くなる
・リアルタイム性はajaxを用いて、常時ハードウェアのステータスを拾うようにする。
[制御]
・WEBアプリ(画面周り)と切り離してバックエンドで動かすドライバ的なものにする。
・URL経由でハードを動かしたり、ステータスを取得できるようにする。
[パラメータ]
・sqlite3で管理する。DB操作はdjangoを使って楽する。
・ログなどもdjangoを使って楽をする。
画面周り+ハード制御用ドライバを実装して、これらをURL経由で操作できるようにすれば
WEB系を取り入れた組込み開発になる。
こんな感じになると組込み系の醍醐味?だと思うLCDにキャラクターパターンをUART経由で送信して表示するというような事はしなくなりそうです。
今日はここまで。
20年続いたシステムでもハードウェア面でメンテナンスが出来なくなって
最新のシステムに置き換える事例などがあるかと思います。
今から作るなら.NETを使って実装が王道だけど、今回はWindows、Linux両方で動く
Pythonを使った方法を考えてみました。
仕様イメージは組込み開発でWindowsやLinuxが動くパソコンを使って装置を動かすというもの。
パソコンに求められるものといえば、
・シリアルポートやLANを使う
・画面で運転状況を表示する
・リアルタイム制御を求める
この3点くらいだと思います。
どういったものを使えば出来るかというと、
1つ目、シリアルポートやLANは、pyserial、twistedなどを使うことで解決。
2つ目、最近の流れに沿って、スマートフォンで操作できるように、WEBアプリ開発でDjango、jQuery mobileを使えば対応できる。
3つ目、WEBフレームワークDjangoのバックグラウンドにハード制御を行うスレッド又はプロセスを常駐させることで対応できる。
今回はDjangoを使うので、管理画面が最初からついてきます。しかもデータ操作が可能なものです。
それを使えばパラメータ設定などはDjangoの機能を使えば簡単に出来るし、データベースをSqlite3に
すれば1ファイルで管理できるメリットずくめ。後はWEBサーバが必要になるのでnginxを使うとします。
ここまでの構成をまとめると、
nginx + django + jquery mobile + pyserial + twisted + sqlite3
だいぶ使うものが増えてきました。
[画面周り]
・ブラウザ経由(ネットワーク経由で遠隔操作なども可能)
・スマホ対応のライブラリjquery mobileを使うことで幅広くなる
・リアルタイム性はajaxを用いて、常時ハードウェアのステータスを拾うようにする。
[制御]
・WEBアプリ(画面周り)と切り離してバックエンドで動かすドライバ的なものにする。
・URL経由でハードを動かしたり、ステータスを取得できるようにする。
[パラメータ]
・sqlite3で管理する。DB操作はdjangoを使って楽する。
・ログなどもdjangoを使って楽をする。
画面周り+ハード制御用ドライバを実装して、これらをURL経由で操作できるようにすれば
WEB系を取り入れた組込み開発になる。
こんな感じになると組込み系の醍醐味?だと思うLCDにキャラクターパターンをUART経由で送信して表示するというような事はしなくなりそうです。
今日はここまで。
ラベル:
django,
jquery mobile
2012年2月27日月曜日
djangoの解析メモapp_lanel
models.pyのclass Metaにapp_labelとdb_tableで定義できる。
southでmigrateする時はapp_labelの名前で行う。(もちろん他のモデルと一緒にmigrate)
django上ではこのあたりの処理を、
django\db\loading.py
あたりがメインぽい。
ちなみにここ、1.4のソースやトラッカー見てしばらく解析しないと分からなかった部分。
southでmigrateする時はapp_labelの名前で行う。(もちろん他のモデルと一緒にmigrate)
django上ではこのあたりの処理を、
django\db\loading.py
あたりがメインぽい。
ちなみにここ、1.4のソースやトラッカー見てしばらく解析しないと分からなかった部分。
ラベル:
django
2012年1月24日火曜日
django管理画面の一覧をCSV出力する。
ここの記事を見て自分もこれ導入しようと思いさっそくインストールしてみた。
コマンドライン上で
easy_install.exe https://bitbucket.org/tokibito/django-csvutils/get/6c2ddaf1e92f.zip
これを打つだけ。いたって簡単。
CSV出力を設定したいAdmin.pyを編集すればComboxに削除しかなかった欄に「export to CSV」が追加される。
この名称はローカライズ対応になっているんだけど、Localeファイルをどこに入れればいいんだろうなあ。
コマンドライン上で
easy_install.exe https://bitbucket.org/tokibito/django-csvutils/get/6c2ddaf1e92f.zip
これを打つだけ。いたって簡単。
CSV出力を設定したいAdmin.pyを編集すればComboxに削除しかなかった欄に「export to CSV」が追加される。
この名称はローカライズ対応になっているんだけど、Localeファイルをどこに入れればいいんだろうなあ。
ラベル:
django
2012年1月23日月曜日
djangoの翻訳テキストをカスタマイズする。
Windows上で翻訳テキストをコンパイルするには、
gettext ver0.15以上が必要のようです。
1.まずは必要なライブラリをダウンロードする。
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/
上記サイトから
gettextのver0.17をダウンロード。
ダウンロードしてきた
gettext-runtime-0.17-1.zip
gettext-tools-0.17.zip
を展開してbinフォルダ内の中身を全てpython.exeと同じフォルダに入れた。
2.翻訳テキストを編集する。
拡張子.poファイルが編集する翻訳テキストになっていて、
拡張子.moファイルがコンパイルされた翻訳テキストという構成になっている。
まず変更したいアプリ内にある翻訳ファイル.poを編集する。
3.編集した翻訳テキストをコンパイルする。
コマンドライン上でアプリフォルダまで移動してから
python manage.py compilemessages -l ja
と打ち込むとdjango.moを作ってくれる。
例:
.\django\contrib\admin\locale\ja\LC_MESSAGES\django.po を編集した時は
コマンドライン上で
.\django\contrib\admin
まで移動してからコマンドを打ち込めばOK。
gettext ver0.15以上が必要のようです。
1.まずは必要なライブラリをダウンロードする。
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/
上記サイトから
gettextのver0.17をダウンロード。
ダウンロードしてきた
gettext-runtime-0.17-1.zip
gettext-tools-0.17.zip
を展開してbinフォルダ内の中身を全てpython.exeと同じフォルダに入れた。
2.翻訳テキストを編集する。
拡張子.poファイルが編集する翻訳テキストになっていて、
拡張子.moファイルがコンパイルされた翻訳テキストという構成になっている。
まず変更したいアプリ内にある翻訳ファイル.poを編集する。
3.編集した翻訳テキストをコンパイルする。
コマンドライン上でアプリフォルダまで移動してから
python manage.py compilemessages -l ja
と打ち込むとdjango.moを作ってくれる。
例:
.\django\contrib\admin\locale\ja\LC_MESSAGES\django.po を編集した時は
コマンドライン上で
.\django\contrib\admin
まで移動してからコマンドを打ち込めばOK。
ラベル:
django
2011年7月28日木曜日
Djangoが使えるようになってきた
デバッグ環境が乏しくてコンパイルする言語と比べて開発に時間かかるし、
そんなにコード量かけないなって思っていたけど、書き方・作法が分かってくると
急に心強くなってくるWEBフレームワークだなあってのが最近の印象。
そんなにコード量かけないなって思っていたけど、書き方・作法が分かってくると
急に心強くなってくるWEBフレームワークだなあってのが最近の印象。
ラベル:
django
2011年6月13日月曜日
Django デバッグ環境を整える
今回は3つデバッグ環境について触れてみた。
・Logging
・django-debug-toolbar(IE9だと表示崩れる)
・pylint
○Logging
Django v1.3になって、setting.pyにロギングするコードが追加されたようだ。
使い方は簡単で、
https://docs.djangoproject.com/en/1.3/topics/logging/
ここを見ながら設定してみると、
setting.py
views.py
○django-debug-toolbar
さらにデバッグしやすくしようと思って調べてみたら、
「django-debug-toolbar」というものを発見。
ここからいつもどおりの手順で導入していく。
1.インストール
sudo easy_install-2.5 django-debug-toolbar
2.設定
.\python\Lib\site-packages\django_debug_toolbar-0.8.5-py2.6.egg\example
サンプルを見ながら設定していく。
settings.py
3.確認
サーバ立ち上げて、管理画面を表示してみる。
右側に黒いメニューバーが表示されていれば成功。
(Firefoxはうまく表示されたが、IEだと表示バグがあった。。)
○pylint
コーディング中に構文エラーを発見したい人向け。
自分が使っているエディタはVIMを使っているので、
VIM環境で楽に使えるように設定まで行ってみた。
1.インストール
easy_install pylint
2.VIM環境設定
http://www.vim.org/scripts/script.php?script_id=891
pylint.vimの最新版をダウンロードして、
Vimフォルダのruntime/plugin/
にコピーする。
参考ページ
http://www.hexacosa.net/blog/detail/54/
・Logging
・django-debug-toolbar(IE9だと表示崩れる)
・pylint
○Logging
Django v1.3になって、setting.pyにロギングするコードが追加されたようだ。
使い方は簡単で、
https://docs.djangoproject.com/en/1.3/topics/logging/
ここを見ながら設定してみると、
setting.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'app': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
}
views.py
import logging
...
logger = logging.getLogger('app')
...
このような感じに設定しておく。○django-debug-toolbar
さらにデバッグしやすくしようと思って調べてみたら、
「django-debug-toolbar」というものを発見。
ここからいつもどおりの手順で導入していく。
1.インストール
sudo easy_install-2.5 django-debug-toolbar
2.設定
.\python\Lib\site-packages\django_debug_toolbar-0.8.5-py2.6.egg\example
サンプルを見ながら設定していく。
settings.py
INSTALLED_APPS = (
...
'debug_toolbar',
)
MIDDLEWARE_CLASSES = (
...
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
DEBUG_TOOLBAR_PANELS = (
'debug_toolbar.panels.version.VersionDebugPanel',
'debug_toolbar.panels.timer.TimerDebugPanel',
'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
'debug_toolbar.panels.headers.HeaderDebugPanel',
'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
'debug_toolbar.panels.template.TemplateDebugPanel',
'debug_toolbar.panels.sql.SQLDebugPanel',
'debug_toolbar.panels.signals.SignalDebugPanel',
'debug_toolbar.panels.logger.LoggingPanel',
)
def custom_show_toolbar(request):
return True # Always show toolbar, for example purposes only.
DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECTS': False,
'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar,
#'EXTRA_SIGNALS': ['myproject.signals.MySignal'],
'HIDE_DJANGO_SQL': False,
}
3.確認
サーバ立ち上げて、管理画面を表示してみる。
右側に黒いメニューバーが表示されていれば成功。
(Firefoxはうまく表示されたが、IEだと表示バグがあった。。)
○pylint
コーディング中に構文エラーを発見したい人向け。
自分が使っているエディタはVIMを使っているので、
VIM環境で楽に使えるように設定まで行ってみた。
1.インストール
easy_install pylint
2.VIM環境設定
http://www.vim.org/scripts/script.php?script_id=891
pylint.vimの最新版をダウンロードして、
Vimフォルダのruntime/plugin/
にコピーする。
参考ページ
http://www.hexacosa.net/blog/detail/54/
ラベル:
django
2011年3月11日金曜日
Django + PythonでPDF作成
1.インストール
easy_install -U reportlab
2.実行
PDFレイアウトをちまちま書いていくのは大変なので、
テンプレート画像を読み込んで、そこに記入していく方式をとってみる。
これで仕上がったPDFを印刷してみるとわかるけど、
テンプレート内に入っている文字はドットが荒くなるので、
線の枠組みだけテンプレートに書いて、文字は別途挿入した方がいい。
あとテンプレートのサイズはソースコード内に記述したサイズにすると
原寸大で描画できる。
参照リンク
http://docs.nullpobug.com/django-doc-ja/trunk/howto/outputting-pdf.html
http://d.hatena.ne.jp/piro_suke/20070704/1183561248
http://tt-house.com/2009/12/python-reportlab-pdf.html
easy_install -U reportlab
2.実行
from reportlab.pdfgen import canvas
from django.http import HttpResponse
def some_view(request):
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
p = canvas.Canvas(response)
#帳票レイアウト描画
p.drawString(100, 100, "Hello world.")
p.showPage()
p.save()
return response
PDFレイアウトをちまちま書いていくのは大変なので、
テンプレート画像を読み込んで、そこに記入していく方式をとってみる。
from reportlab.pdfgen import canvas
#!/user/bin/env python
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
# Create your views here.
def sample1(request):
response = HttpResponse(mimetype='application/pdf')
#response['Content-Disposition'] = 'attachment; filename=c:\\tmp\\somefilename.pdf'
response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
p = canvas.Canvas(response)
#テンプレート読み込み(A4サイズ[595x841], テンプレートサイズ[453x785])
_lft = 30
_top = 10
_rit = 20
_btm = 10
_wid = 210 - _lft - _rit
_hei = 297 - _top - _btm
p.drawInlineImage("c:\\tmp\\test.png",
_lft*mm,
_btm*mm,
# width=_wid*mm,
# height=_hei*mm,
# preserveAspectRatio=True
)
#記入項目
p.drawString(0*mm, 0*mm, "Hello world1.")
p.drawString(40*mm, 100*mm, "Hello world2.")
p.drawString(40*mm, 200*mm, "width=%d, height=%d" % (_wid*mm, _hei*mm))
p.showPage()
p.save()
return response
これで仕上がったPDFを印刷してみるとわかるけど、
テンプレート内に入っている文字はドットが荒くなるので、
線の枠組みだけテンプレートに書いて、文字は別途挿入した方がいい。
あとテンプレートのサイズはソースコード内に記述したサイズにすると
原寸大で描画できる。
参照リンク
http://docs.nullpobug.com/django-doc-ja/trunk/howto/outputting-pdf.html
http://d.hatena.ne.jp/piro_suke/20070704/1183561248
http://tt-house.com/2009/12/python-reportlab-pdf.html
2011年2月28日月曜日
Windows環境でdjango+バーコード作成モジュールをインストールする
Windows環境でPython + Sqlite + Django開発環境を簡単に構築する方法。
手軽に構築したい人向け。
1.TracLightingをダウンロード&インストール。
http://sourceforge.jp/projects/traclight/wiki/FrontPage
インストール場所>D:\TracLight
ダウンロードしたEXEファイルを実行してインストールディレクトリを上記に設定。
2.Django公式ページからDjango本体をダウンロード&インストール。
http://www.djangoproject.com/download/
インストール場所>D:\tmp\django
Admin権限でDOSプロンプト実行。インストール場所へ移動して、
python setup.py install
プロジェクトの作り方。
python d:\TracLight\python\Scripts\django-admin.py startproject <プロジェクト名>
3.fastcgiでdjango起動するように設定
nginx + gunicorn + django設定例
Pythonの正規表現ライブラリが足りなくてgnicornで動かなかったので、
通常のFastcgiで動かす方法でflupをインストール。
easy_install -U flup
nginx.confの設定は、自身のポート番号(80)の設定とfastcgiの設定の2つ。
上記リンクに書かれている部分
#host to gunicorn serverから改行までの設定をコメントアウト
##host and port to fastcgi serverから改行までの設定をコメントアウト解除
にする。
4.バーコード作成ライブラリ「huBarcode」をダウンロード&インストール。
easy_intsll PIL
easy_install -U huBarcode
5.動作確認。
<サンプルコード>
これで完了。
起動させるには、
python manage.py runfcgi method=threaded host=127.0.0.1 port=8000
nginx.exe
nginxを停止するなら
nginx.exe -s stop
手軽に構築したい人向け。
1.TracLightingをダウンロード&インストール。
http://sourceforge.jp/projects/traclight/wiki/FrontPage
インストール場所>D:\TracLight
ダウンロードしたEXEファイルを実行してインストールディレクトリを上記に設定。
2.Django公式ページからDjango本体をダウンロード&インストール。
http://www.djangoproject.com/download/
インストール場所>D:\tmp\django
Admin権限でDOSプロンプト実行。インストール場所へ移動して、
python setup.py install
プロジェクトの作り方。
python d:\TracLight\python\Scripts\django-admin.py startproject <プロジェクト名>
3.fastcgiでdjango起動するように設定
nginx + gunicorn + django設定例
Pythonの正規表現ライブラリが足りなくてgnicornで動かなかったので、
通常のFastcgiで動かす方法でflupをインストール。
easy_install -U flup
nginx.confの設定は、自身のポート番号(80)の設定とfastcgiの設定の2つ。
上記リンクに書かれている部分
#host to gunicorn serverから改行までの設定をコメントアウト
##host and port to fastcgi serverから改行までの設定をコメントアウト解除
にする。
4.バーコード作成ライブラリ「huBarcode」をダウンロード&インストール。
easy_intsll PIL
easy_install -U huBarcode
5.動作確認。
<サンプルコード>
from ean13 import EAN13Encoder
_barcode = EAN13Encoder(’123456789012′)
_barcode.save(“test_barcode.png”)
これで完了。
起動させるには、
python manage.py runfcgi method=threaded host=127.0.0.1 port=8000
nginx.exe
nginxを停止するなら
nginx.exe -s stop
ラベル:
django
2010年12月10日金曜日
[Django]static_mediaの設定方法
settings.pyを開いて
MEDIA_ROOT = '/var/www/mysite/site_media/'
MEDIA_URL = '/site_media/'
urls.pyを開いて
from django.conf import settings
(r'^site_media/(?P.*)', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
を追加。
テンプレート内でメディアにアクセスする場合、絶対パス。
/site_media/foo.jpg
View.py内でメディアにアクセスする場合、相対パス。
./site_media/foo.jpg
MEDIA_ROOT = '/var/www/mysite/site_media/'
MEDIA_URL = '/site_media/'
urls.pyを開いて
from django.conf import settings
(r'^site_media/(?P
を追加。
テンプレート内でメディアにアクセスする場合、絶対パス。
/site_media/foo.jpg
View.py内でメディアにアクセスする場合、相対パス。
./site_media/foo.jpg
ラベル:
django
登録:
コメント (Atom)