
大家好
最近突然遇到一個需求
就是需要去修改python 的 django 的 wagtail 中的原生function功能
例如:
我想要修改會員後台列表的功能
增加顯示自定義欄位
與修改會員的時候可以順便修改該欄位
就這麼單純簡單的功能
但是所得到的答案是
如果是自己繼承後要再使用 或者是 "替換 model "
這是可以做到
但是要直接替換掉 class 的 function
基本上無法做到
而且糟糕的是
就算我替換了users model
wagtail 後台的功能與頁面也不會有變化
因為寫入欄位與模板都是固定的 (但是模板可以覆蓋,這還可以)
接著
我去看wagtail 的原始碼
例如這個功能在wagtail\users\views/ users.py 中
if form.is_valid(): user = form.save() if user == request.user and 'password1' in form.changed_data: # User is changing their own password; need to update their session hash update_session_auth_hash(request, user) messages.success(request, _("User '{0}' updated.").format(user), buttons=[ messages.button(reverse('wagtailusers_users:edit', args=(user.pk,)), _('Edit')) ]) for fn in hooks.get_hooks('after_edit_user'): result = fn(request, user) if hasattr(result, 'status_code'): return result return redirect('wagtailusers_users:index') else: messages.error(request, _("The user could not be saved due to errors."))
發現有留一個 hook 外掛事件
所以經過測試
只能使用 hook 來達成這種客製化需求了
## wagtail HOOK
例如在自己的 view裡面可以新增
@hooks.register('after_edit_user') def before_create_page(request, user): try: SiteUserR = SiteUser.objects.get(user=user) except: SiteUserR = SiteUser() SiteUserR.user = user SiteUserR.note = request.POST.get('note','') SiteUserR.save()
所以儲存部分可以直接使用 hook 新增寫入
接著模板修改
在:
自己app siteuser\templates\wagtailusers\users
新增 edit.html 與 list.html
對應的是
wagtail\users\templates\wagtailusers\users 裡面檔案
就可以覆蓋原本 wagtail 的後台模板了
達成一點客製化功能
想一想
如果要在django 上面做一個高度客製化CMS平台
看來還是要自己開發比較實在...
留言板
歡迎留下建議與分享!希望一起交流!感恩!