django
確認画面を作るときなどに使えるかも class XForm(forms.Form): item = forms.ChoiceField(choices=[(i, i) for i in xrange(3)]) data = forms.DateTimeField(required=False) class ReadOnlyWidget(forms.Widget): def render(self, name, value, attrs=No…
ModelFormのように、内部のMetaを見るクラスを自分で作って見たいと思った。 概要 djangoでは、以下のようにMetaを使ってmetaclassに情報を渡して、Formクラスを作れる。 class ArticleForm(ModelForm): class Meta: model = Article また、以下のようにfiel…
ちょっとしたファイルの生成などに,テンプレート使いたい。 djangoの環境があったので、このテンプレートをdjangoの開発以外でも使えたら楽。重要なこと includeタグが使えること。 ちょっと調べたら使えたのでメモ。 以下のようなファイル構成 . ├── hello.…
from django.conf import settings if not settings.configured: settings.configure() import django.db.models as m class Parser(object): def __init__(self): self.D = {} def eat(self, klass): D = self.D for k in reversed(klass.mro()): if k not …
formsetの取る引数の形式が独特なのでそれに合わせてデータを作るのが面倒。 こんな感じの関数を作っておくとテストのとき楽かもしれない。 def formset_to_params(formset): r = {} mform = formset.management_form for k, bf in zip(mform.fields.keys(),…
こんな感じに書くと、何も考えずに使えて便利かもしれない。 from django.conf import settings settings.configure() import django.forms as forms from django.forms.formsets import BaseFormSet, formset_factory class ExtraArgsForm(forms.Form): def…
暑くてまじめに書く気が起きない。ごめんなさい。memo,memo https://bitbucket.org/podhmo/po-django-qutil/src 普通のqobject Q(foo="bar") & (boo=True) という感じに作成して、比較したい値が決めた状態で作ってしまう。ついでに,djangoのキーをつなげる…
djangoのQobjectの比較する関数を書いた。Qobjectは順序不同になるので、比較がめんどうだった。 (他に楽に比較する方法があるのかもしれないけれど) 別にnoseの関数を使う必要はないけれど。 from django.conf import settings settings.configure() from…
問題 djangoのモデルのデフォルトの表示がしょぼい オブジェクトの持つフィールドの値が分かんない。 __unicode__メソッドを自分で書く必要がある。 モデル毎に__unicode__を定義したくない。 面倒くさい デコレータとかでどうにかならない? でも、__unicod…
python manage.py dumpdata --format=xml ぐちゃぐちゃ。 <django-objects version="1.0"><object pk="4" model="auth.permission"><field type="CharField" name="name">Can add group</field><field to="contenttypes.contenttype" name="content_type" rel="ManyToOneRel">2</field></object></django-objects>
memo.ぐちゃぐちゃ。 python views.pyという感じで実行できる viewsとしても動く ぐちゃぐちゃ。
djangoのテンプレートの話。カスタムタグやフィルタ以外で、safeをつける必要がないオブジェクトを作りたい。 formのような。 {{form.as_p}}はできるけれど、自分で作った以下のようなオブジェクトはsafeをつける必要がある。 class A(str): def as_p(self):…
django-extensionsにそんな機能が入っていた。 ubuntuで図を描いてみる例。 必要なもの graphviz django-extensions requirements.txt pygraphviz django-extensions install sudo aptitude install graphviz graphviz-dev pip install -r requirements.txt …
デフォルトは""なので分かりにくい。settings.pyに以下を追加すると、テンプレートで間違えた時の表示が変わる。 TEMPLATE_STRING_IF_INVALID = "THIS IS NOT EXIST"
以下のようなurlを指定する必要があって面倒。 json/foo json/bar json/hoo .... 普通にurls.pyを書くと from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: # from django.contrib import…
install pip install gunicorn sudo aptitude install nginx cd /etc/nginx sudo mv nginx.conf nginx.conf.orig sudo vi nginx.conf nginx.confを以下のように ## worker=1, port=8000 user www-data; worker_processes 1; error_log /var/log/nginx/error.…
詳しくはリンク先のコメント https://gist.github.com/903244#comments
結構手軽にできた。templates/admin/base_site.htmlをdjangoのcontrib/admin/templates/adminからコピー。 templateの有効なディレクトリに置く。 extrastyleの中にcssを書く。ちょこっと。 titleを変える。 @@ -1,10 +1,16 @@ {% extends "admin/base.html"…
memoなので雑。(後で手直し) admin.pyで list_filter = ["count"] のものは http://example.com:8000/admin/anything?count__lt=10 http://example.com:8000/admin/anything?count__lte=10 http://example.com:8000/admin/anything?count=10 http://exampl…
androidの一部のブラウザなどは、表示しているhtmlのソースを見ることができないものがある。 そのような時にhtmlのソースを見るには、Context-Typeを指定してあげると良い。 code views.pyの一部 def response_as_text(request): response = direct_to_temp…
djangoのtemplateをもっと手軽に、具体的にはviewsとtemplate分けたりせずに使いたい。*1 要求 webAPIの動作確認をするために、いちいち、ファイル分けたくない。 もっと手軽に利用したい。 問題 ところがドキュメントの通りに書くとimport Errorを返してし…
本来のdjangoの機能を使って実装した方が見通しが良いと教えてもらった。 こんな感じに作れば良いらしい。 from django.db import models class InspectableModel(models.Model): def __unicode__(self): field_names = [field.get_attname() for field in s…
クラスデコレータとかで何とかならないかな? def inspectable(klass): field_names = [field.get_attname() for field in klass._meta.fields] def _inspect(self): results = [] results.append('%s object' % self.__class__.__name__) for name in field…
0.0.0.0:80とか知らなかった。 # localhost:80でサーバを立ち上げる python manage.py runserver # port指定 python manage.py runserver 9641 # 外部に公開 python manage.py runserver 0.0.0.0:5678 #portが空いていれば。