ラベル Django-cms の投稿を表示しています。 すべての投稿を表示
ラベル Django-cms の投稿を表示しています。 すべての投稿を表示

2011年11月5日土曜日

django-1.3にdjango-cms-2.2をインストールする時

django-1.3にdjango-cms-2.2をインストールするとき、docのチュートリアルに沿って行けばいいんだけれど、django-mpttのversionに注意
素で入れるとdjango-mptt-0.5.0が 入ってしまうがこれが曲者。0.5.0が入っていたらuninstallしてここから0.4.2を取ってきてインストールしよう。
tagsを押すとold-releaseが出てくる。

と書いていたら、4時間前に craigdsさんがパッチを当てたみたい。0.5.1で今は動いています。
pip install -U django-mpttでアップグレードしよう。

2011年8月11日木曜日

insert_at with commit arg @ django-cms 2.2 b1

やられた。
django-cms 2.2 b1から従来のdjango-cms内のmpttからdjango-mpttに変更になっている。

ここのDjango-cmsでpageをスクリプトで挿入する方法が"commit=True"から"save=True"に変更になっている。

2011年6月23日木曜日

djangoでlocalとremoteを切り替える。tips

djangoで共有SSLを使っていると、remoteとlocalを切り替えるのが面倒だ。
settingsに
USE_AT_LOCAL = False
を追加して、
manage.pyに
settings.USE_AT_LOCAL = True
を追加して、
 remoteとlocalの部分をifで切り分けた。

eclipseでdebugできるぞ。

2011年6月7日火曜日

django-cmsでTinyMCEのcustomize

settings.pyに
CMS_PLUGIN_TEXT_TINYMCE_CONFIG = {}
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme'] = "advanced"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_buttons1'] = "cut,copy,paste,|,undo,redo,removeformat,|,code,preview,cleanup,|,help,|,hr,charmap,insertdate,inserttime"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_buttons2'] = "styleselect,formatselect,fontselect,fontsizeselect,|,justifyleft,justifycenter,justifyright,"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_buttons3'] = "bold,italic,underline,strikethrough,sub,sup,|,forecolor,backcolor,|,blockquote ,link,unlink,anchor,image,|,bullist,numlist,|,indent,outdent,"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_toolbar_location'] = "top"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_toolbar_align'] = "left"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_statusbar_location'] = "bottom"
CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme_advanced_resizing'] = True

cms/plugins/text/widgets/tinymce_widget.py
assert 'id' in final_attrs, "TinyMCE widget attributes must contain 'id'"
mce_config = cms.plugins.text.settings.TINYMCE_CONFIG.copy()
mce_config.update(get_language_config(self.content_language))
cms/plugins/text/settings.py
if USE_TINYMCE:
    import tinymce.settings
    TINYMCE_CONFIG = getattr(settings, 'CMS_PLUGIN_TEXT_TINYMCE_CONFIG', tinymce.settings.DEFAULT_CONFIG)
となっている。
 CMS_PLUGIN_TEXT_TINYMCE_CONFIG['theme'] = "advanced"
を入れておかないとerror

2011年6月6日月曜日

django-cmsでTinyMCEの設定でsimpleとadvancedが一緒

plugins/text/widgets/tinymce_widget.py

line 65-66
mce_config['plugins'] = plugins
if mce_config['theme'] == "simple":
    mce_config['theme'] = "advanced"
mce_config['theme_advanced_buttons1_add_before'] = "cmsplugins,cmspluginsedit"
やられた。

2011年6月5日日曜日

django-cmsでTinyMCE

INSTALLED_APPSに'tinymce',を追加。
mediaディレクトリの適当な位置にTinyMCE本体をコピー。
TINYMCE_JS_URLとTINYMCE_JS_ROOTを設定。
url.pyにurl(r'^tinymce/', include('tinymce.urls')),を追加。

2011年5月31日火曜日

plugins template

すぐ忘れるので、メモ
find . -type d -name templates | grep plugins | sed 's/$/\/cms/' | xargs cp -rvf -t [project]/templates/

2011年5月24日火曜日

django-cms media folder

すぐ忘れるので、メモ
cp -rvf django/django/contrib/admin/media [project]/media/admin/
cp -rvf django-cms/cms/media [project]/media/

2011年4月14日木曜日

括弧抜け

cms/templates/admin/cms/page/change_form.html
52: .notfilled{
53:     color: #808080 !important;
54: }
django-cms-2.1.3

本家に投げときました。

2011年2月8日火曜日

django-axesでlogin lock

djangoでadminやloginに複数回のログイン失敗に対してlockをかけ設定した時間が経過しないとログインできないようにしたいならdjango-axes
ドキュメントとおりにインストールしてdjangoに設定すればOK

ソース読めば分かるけれど、ドキュメントにない設定もある。使うのは、
#失敗した後ロックされる時間
AXES_COOLOFF_TIME = 3 #hour
#ロックされたときに使うテンプレート
AXES_LOCKOUT_TEMPLATE = 'account_locked.html'

あと、
settings.pyで
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
と設定しているから
LOGFILE = os.path.join(settings.DIRNAME, 'axes.log')

LOGFILE = os.path.join(settings.PROJECT_ROOT, 'axes.log')
としてプロジェクトディレクトリにlogin履歴がaxes.logに書き込まれる。


AXES_LOCKOUT_TEMPLATEには
'cooloff_time': COOLOFF_TIME,
'failure_limit': FAILURE_LIMIT,
が渡されるので好きにしてよい。

デコレーターなので自前のログイン関数にも
from axes.decorators import watch_login
.......
@watch_login
def login(request):
でOK


本家はここ。 TNX!

2011年1月20日木曜日

monkey_patch function

django-cmsのmonkeypatch_reverseから忘れないうちにメモ。
pythonで、関数もオブジェクトだから既存のライブラリを書き換えてしまえ。

main.py
from funcs import func

def main():
    func.printStr(u'hello')

if __name__ == '__main__':
    main()
    import monkey #新しい関数でpatch
    main()
funcs/func.py  #元の関数
def printStr(string):
    print u'original', string
monkey_patch.py  #新しい関数
import funcs

def monkey_patch_func():

    def new_printStr(string):
        print u'monkey', string

    print funcs.func.printStr
    funcs.func.old_printStr = funcs.func.printStr   #元の関数を退避
    funcs.func.printStr = new_printStr   #新しい関数を接続
    print funcs.func.printStr

    monkeypatched = False    #新しい関数の接続は1回だけ
    if not monkeypatched:
        monkey_patch_func()
        monkeypatched = True

2011年1月17日月曜日

django-cms, python2.4 work around

RC2になってからインストール時にerror
古いpythonしか使えないから、小細工を

cms/utils/urlutils.pyのis_media_requestを
def is_media_request(request):
    """
    Check if a request is a media request.
    """
    parsed_media_url = urlparse(settings.MEDIA_URL)
    #python 2.4 work around                                                    
    try:
        if request.path.startswith(parsed_media_url.path):
            if parsed_media_url.netloc:
                if request.get_host() == parsed_media_url.netloc:
                    return True
            else:
                return True
    except:
        if request.path.startswith(parsed_media_url[2]):
            return True
    #python 2.4 work around end                                                
    return False

追記:結局pythonを野良ビルド

2011年1月12日水曜日

共有SSLでDjango接続

proxyを使って
              https                                                http
client---------->SSL(proxy) Server--------->Server
                             |----> provider
と言うことらしい。
つまり、プロバイダ内のSSLサーバーがSSL接続を受けて、プロバイダ内のネットワークを経由して共有サーバーに普通にhttp接続する。こうすることにより、clientからプロバイダまでの接続が暗号化される。

coreserverだと
request.METAの中に'HTTP_VIA'と'HTTP_X_FORWARDED_FOR'がセットされている。
ちゅうことは、Djangoのミドルウエアで受けたらOKかな?

参考:
http://drupal.org/node/339552
http://wiki.ryusendo.net/index.cgi?page=PHP%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0#p17

追記:
HTTP_X_FORWARDED_FORがセットされたrequestがくるとurlを変更するミドルウエアでOK
のこるはlogin, admin

2010年12月13日月曜日

django-cmsをCGIで

django-cmsをCGIでやろうとするとURLにlanguageとCGIの名前が含まれて邪魔。
menuのNavigationNodeの初期化の時取ってしまうと吉。

と思っていたが別の方向考慮中
結論:REDIRECT_URLをとっちまう。@CGI

2010年11月28日日曜日

さくらとcoreserver-mini

先日Django-cmsをデプロイしてみたが、さくらでは眠ってしまいそうなくらい遅かった。coreserver-miniではそこそこのレスポンス。借りているサーバーにもよるのだろうけれど…
マシンスペック
さくら
CPU T7200 @ 2.00GHz メモリ:2GB
 coreserver-mini
Xeon L3110 3.00GHz x 2    4019MB
の差でしょうか。

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年10月27日水曜日

templatetagsでのerrorはTemplateSyntaxError

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