为啥 Django CMS doc'n example Hello Plugin 在渲染时向 hello 模型类添加 <projectname_> 前缀导致错误?
Posted
技术标签:
【中文标题】为啥 Django CMS doc\'n example Hello Plugin 在渲染时向 hello 模型类添加 <projectname_> 前缀导致错误?【英文标题】:Why does Django CMS doc'n example Hello Plugin add <projectname_> prefix to hello model class on render causing error?为什么 Django CMS doc'n example Hello Plugin 在渲染时向 hello 模型类添加 <projectname_> 前缀导致错误? 【发布时间】:2019-09-30 17:43:32 【问题描述】:我正在尝试在此处复制 Django CMS 文档中的 Hello 插件示例:http://docs.django-cms.org/en/latest/how_to/custom_plugins.html
在 CMS 中,我可以看到并添加 HelloPlugin,但是当我按下保存时,我得到: 异常值:没有这样的表:DEC_hello('DEC'是我的项目名称)
我已将文档中的代码复制/粘贴到 models.py 和 cms_plugins.py 以及 hello_plugin html 中。
我知道在models.py中将常规(models.model)类/表添加到以项目名称为前缀的数据库中是正常的。
但是 class Hello(CMSPlugin) 没有在数据库中创建表。我认为它是不同的,根本不应该作为一个表添加到数据库中,当然也不应该命名为 DEC_hellow。
我已经保存了所有这些 .py 文件并运行 makemigrations 并迁移了几次,但没有发现/进行任何更改。
提前感谢您的帮助。
运行 Django CMS 3.6.0,Django 版本 1.11.20 Python 3.7.3 在 Windows 10 上运行
models.py
from django.db import models
from cms.models.pluginmodel import CMSPlugin
class Hello(CMSPlugin):
guest_name = models.CharField(max_length=50, default='Guest')
cms_plugins.py
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from django.utils.translation import ugettext_lazy as _
from .models import Hello
@plugin_pool.register_plugin
class HelloPlugin(CMSPluginBase):
model = Hello
name = _("Hello Plugin")
render_template = "hello_plugin.html"
cache = False
def render(self, context, instance, placeholder):
context = super(HelloPlugin, self).render(context, instance, placeholder)
return context
hello_plugin.html
<h1>Hello % if request.user.is_authenticated %
request.user.first_name request.user.last_name
% else %
instance.guest_name
% endif %</h1>
点击保存在 CMS 中添加插件时出错:
OperationalError at /en/admin/cms/page/add-plugin/
no such table: DEC_hello
Request Method: POST
Request URL: http://localhost:8000/en/admin/cms/page/add-plugin/?placeholder_id=41&plugin_type=HelloPlugin&cms_path=/en/purpose-list/&plugin_language=en
Django Version: 1.11.20
Exception Type: OperationalError
Exception Value:
no such table: DEC_hello
Exception Location: D:\dev\djangocms\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 328
Python Executable: D:\dev\djangocms\Scripts\python.exe
Python Version: 3.7.3
Python Path:
['D:\\dev\\djangocms\\StoneProj',
'D:\\dev\\djangocms\\Scripts\\python37.zip',
'D:\\dev\\djangocms\\DLLs',
'D:\\dev\\djangocms\\lib',
'D:\\dev\\djangocms\\Scripts',
'c:\\users\\dad\\appdata\\local\\programs\\python\\python37\\Lib',
'c:\\users\\dad\\appdata\\local\\programs\\python\\python37\\DLLs',
'D:\\dev\\djangocms',
'D:\\dev\\djangocms\\lib\\site-packages']
Server time: Mon, 13 May 2019 14:01:15 -0400
【问题讨论】:
【参考方案1】:终于想通了。简单的。我需要跑步 python manage.py makemigrations and ...migrate with my App name (DEC, 在我的例子中) 选项。否则,这些功能仅在基础 django cms 系统/管理数据元素上执行。
【讨论】:
以上是关于为啥 Django CMS doc'n example Hello Plugin 在渲染时向 hello 模型类添加 <projectname_> 前缀导致错误?的主要内容,如果未能解决你的问题,请参考以下文章
Django-CMS - 当我指定模型时,管理员的 CMS 部分消失