我为django-cms写了一个插件,它有自己的模型和一个PlaceholderField。当我为模型管理员添加PlaceholderAdmin时,我在管理站点上收到了这个:
Exception Type: TemplateSyntaxError
Exception Value:
Caught TypeError while rendering: <lambda>() takes exactly 1 argument (2 given)
Exception Location: <blablapath>/python2.6/site-packages/cms/forms/widgets.py in render, line 199
我一直在寻找解决方案,发现只有django-cms示例的一些问题,如果没有在urls.py中取消注释某些路径就无法运行,所以我猜这可能是网址的问题,尤其是我在我的网站上做了一些魔术网址。问题是:django-cms url的有效条件是什么?有任何想法吗?有解决方案吗以前有人有这个问题吗?
答案 0 :(得分:6)
如果您未在管理类中继承PlaceholderAdminField
,则会导致此问题。
例如:
from cms.admin.placeholderadmin import PlaceholderAdmin
from cms.models.fields import PlaceholderField
class MyModel(models.Model):
name = models.CharField(max_length=100)
sidebar = PlaceholderField('sidebar')
class MyAdmin(PlaceholderAdmin):
""" Put your usual admin stuff here. If you use fieldset,
include the sidebar as its own tuple """
fieldsets = (
(None, {
'fields': ('name',),
}),
('Sidebar', {
'classes': ('plugin-holder', 'plugin-holder-nopage'),
'fields': ('sidebar',)
}),
)
admin.site.register(MyModel, MyAdmin)
答案 1 :(得分:0)
嗯,这似乎是Django-CMS中的一个错误。我从来没有使用它,但是看一下代码,很明显PlaceholderField
的默认表单字段创建了一个lambda,它接受一个参数 - 一个查询集,但该表单字段的render函数用两个参数调用lambda - 请求和查询集。
解决此问题的最佳方法可能是定义自己的PlaceholderField
子类,重新定义formfield
方法,以便返回正确的lambda:
class FixedPlaceholderField(PlaceholderField):
def formfield(self, **kwargs):
return self.formfield_for_admin(None, lambda request, qs: qs, **kwargs)
并在模型中使用此字段。
如果这样修复它,可能值得在Django-CMS中引发一个错误。
答案 2 :(得分:0)
确定。我已经为我解决了这个问题。我仍然不知道发生了什么,但也许我的回答将帮助你解决这个问题;)。 我用过一种方法:
def formfield_for_dbfield(self, db_field, **kwargs):
...
将一个文本字段替换为TinyMCE编辑器。当我删除整个方法时,问题就消失了。如果我以后有时间,也许我会尝试深入挖掘它。 我仍然不相信这是唯一的问题。我有预感它也可能是数据,因为我已经用代码中的文本插件填充了占位符。
希望它有所帮助。