2010年11月26日金曜日

2010年11月25日木曜日

malformed header from script

ここ
標準出力に何かを出力すると同じ現象が起こるらしい。

2010年11月11日木曜日

reportlab misc

canvasのページサイズ
canvas._pagesize

A4  
(210, 297) mm 
( 595.28, 841.89)Pixcel(@72 dpi)

2010年11月9日火曜日

django-scheduleのweekページで曜日の短縮型

日付が2桁だと水曜日に行からあふれるので
_daily_occurrences.htmlの5行め
        {{day.start|date:"l, d"}}

        {{day.start|date:"D, d"}}

2010年11月7日日曜日

djangoのformでMultipleChoiceFieldの初期値設定

forms.MultipleChoiceField(choices=( ('0', 'Foo'), ('1', 'Bar'), ('2', 'Hoge')), required=False, initial=['0', '2'])

2010年11月5日金曜日

2010年11月4日木曜日

Django-cmsでmenuのカスタマイズ

djangoのアプリで結果はpublicに表示したいけれど登録やリストその他のアプリURLはログインしたuserだけに見えるようにしたい。(Advanced SettingsのMenu visibilityをfor logged in users onlyに設定しちゃうとそのページも見えなくなる。)
たとえば、edit, list, enrollをhogeMenuとしてmenu.pyに登録して、一般に表示する部分はurl(r'$', 'showPublic'),とurls.pyの登録し
/hoge/                                 一般に表示する
/hoge/edit/                        ログインユーザーのみ
/hoge/list/                         ログインユーザーのみ
/hoge/enroll/                    ログインユーザーのみ
としたければ
from menus.base import Modifier

class skipHogeMenuWithoutLogin(Modifier):
    def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
        for node in nodes:
            if node.namespace == u'HogeMenu':
                if request.user.is_authenticated():
                    node.visible = True
                else:
                    node.visible = False
       
        return ret

menu_pool.register_modifier(skipHogeMenuWithoutLogin)
 をmenu.pyに追加すればよい

Django-cmsでApphook

djangoアプリをdjango-cmsのメニューに乗っけるにはApphookを使うのでけれど、Apphookを追加してpageのAdvanced Settingsでアプリを指定してもcmsのメニューには表示されない
cmsのメニューに表示するにはmenu.pyが必要。
メニューに表示されないが、ページのURLに続いて直打でそれぞれのページを打ち込めば表示はされる。
cms_app.py
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
#from menu import HogeMenu    #<-必要

class HogeApphook(CMSApp):
    name = _("Hoge")
    urls = ["hoge.urls"]
    #menus = [HogeMenu]    #<-必要

apphook_pool.register(HogeApphook)
cmsのページでアプリを指定
urls.pyが以下なら
urlpatterns += patterns('hoge.views',
    url(r'edit/$', 'edit_Hoge'),
    url(r'(?P<page>\d+)/$', 'list_Hoge', name='list_Hoge'),
)
http://hogehoge/pageURL/edit/
http://hogehoge/pageURL/1/
でアクセスできる。

2010年11月2日火曜日

bound formでwidgetを変更する

view.pyでお決まりの呪文に追加

if request.method == u'POST':
    form = FooForm(request.POST, instance=Foo)
    form.fields['fieldName'].widget=PasswordInput()
    if form.is_valid():
    .........
else:
    form = FooForm(instance=Foo)
    form.fields['fieldName'].widget=PasswordInput()

2010年10月29日金曜日

さくらでFlask(CGI)

さくらでFlaskをCGIで動かすには。
まずなにはともあれHello Flaskということで
# -*- encoding: utf-8 -*-

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello Flask World!"

'''
if __name__ == "__main__":
    app.debug = True
    app.run()
'''
続けてCGI
#!/home/path2yourVirtualenv/bin/python
# -*- encoding: utf-8 -*-

from wsgiref.handlers import CGIHandler
from helloFlask import app

CGIHandler().run(app)
 .htaccessに
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /helloCGI.cgi/$1 [QSA,L]
 きもはCGIの1行目virtualenvへのpathの設定

2010年10月27日水曜日

Django-cmsでauth

たとえばadminページで
auth | group | Can add group
auth | group | Can change group
auth | group | Can delete group
と表示されているとき

userPermissions = user.get_all_permissions()
でユーザーと所属グループのpermissionsを得る。上記の例なら、
userPermissions = [u"auth.add_group", u"auth.change_group", u"auth.delete_group", ]
そこでパーミッションを例えば
u"auth.add_group" in userPermissions
で分解して個別のpermissionを得る。

追記: has_perm(perm), has_perms(perm_list)を使う。

templatetagsでのerrorはTemplateSyntaxError

templatetagsでerrorを起こすとdebug表示でTemplateSyntaxErrorが表示される。