- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,在 Django 1.7.7 中引入了一种处理信号的新方法。我正在使用 1.7.7
和 django_cms
,在 Python 2 上运行。
我正在尝试实现这种新方法,尽管文档很少但足够简单明了,但它就是行不通。我认为 Django-CMS 或其插件之一与此有关。
我想做的是,对于保存在 pre_save
信号上的每个 MyModel
,我的 CounterModel
的计数器增加 1 MyModel
模型。
我得出的结论是它不起作用,因为 increase_counter
函数中的 raise Exception('it runs')
没有被引发..
我有以下内容:
myapp/models/mymodel.py
from .counter_model import CounterModel
# Imports here
class MyModel(models.Model):
name = models.CharField(max_length=128)
categories = models.ManyToManyField(CounterModel)
myapp/models/counter_model.py
# Imports here
class CounterModel(models.Model):
amount_of_mymodels = models.PositiveIntegerField(default=0)
myapp/signals.py
from .models.mymodel import MyModel
# Other imports here
@receiver(pre_save, sender=MyModel)
def increase_counter(sender, **kwargs):
instance = kwargs.get('instance')
for category in instance.categories.all():
category.amount_of_mymodels += 1
myapp/apps.py
from django.apps import AppConfig
# Other imports here
class MyAppConfig(AppConfig):
name = "myapp"
def ready(self):
import myapp.signals
myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
我的 apps.py
中的 import signals
被执行,因为当我引发异常时,它会在我的控制台中引发(在 ready()
函数)。
希望有人能澄清我遇到的这个问题!
顺便说一句:我还将 myapp
添加到我的 INSTALLED_APPS
更新:我在另一个项目(Python 3,还有 Django 1.7)中尝试了新的信号方法,它工作正常。如果有人知道什么可能导致我的其他项目中的信号失败,请告诉我!我现在将尝试对此进行调试,感谢您提供各种形式的帮助。
注意对于每个认为“for 循环可能为空,打印一些东西”的人,请在我的问题开头注意以下内容:我'我们得出结论,它只是不起作用,因为 increase_counter
函数中的 raise Exception('it runs')
没有被引发..。谢谢!
最佳答案
我通过将 signals.py 代码放入 models.py 来测试您的代码,它可以正常工作。
这是为什么?
来自 Django docs :
Where should this code live?
Strictly speaking, signal handling and registration code can live anywhere you like, although it's recommended to avoid the application's root module and its models module to minimize side-effects of importing code.
In practice, signal handlers are usually defined in a signals submodule of the application they relate to. Signal receivers are connected in the ready() method of your application configuration class. If you're using the receiver() decorator, simply import the signals submodule inside ready().
如果您不想将signals.py 代码放入您的models.py,您可以执行以下操作
class MyAppConfig(...):
...
def ready(self):
# you've to import your app's signals.py
# not Django's signals module
import myapp.signals
编辑
关于这个问题有一些很棒的答案和替代方案:the right place to keep my signals.py files in django
关于python - 未调用 Django + DjangoCMS 信号处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803480/
我正在尝试使用带有一些共享页面的 DjangoCMS 构建多个网站。是否可以创建一个在所有 Django Site 之间共享的页面? 使用基本的 DjangoCMS 配置,当页面在 Site 上发布时
我有一些PeoplePlugin,可以有许多子插件PersonPlugin。我想在 PeoplePlugin 模板中添加编辑模式按钮(添加子插件),这允许我打开模式来创建新的“PersonPlugin
我在 Windows 系统上并关注 Install Django CMS tutorial .根据它,我用 Python 3.4.3 设置了新的虚拟环境,用 pip 安装了 Djangocms-ins
DjangoCMS 工具栏未出现在 Firefox(和 Epiphany)中。不过它在 Chrome 中显示正常。 {% load cms_tags sekizai_tags %}
我正在尝试在 django-cms 中使用 django-contact-form。 django-contact-form 有一个或两个页面(显示表单和感谢信),由 django 模板表示 在这些模
我正在使用 djangoCMS,我已经创建了所有模板并且它们工作正常,现在我的问题是 djangoCMS 页面创建字段,我填写了几个字段,页面名称、slug、菜单标题和页面标题。如何在我的页面上添加和
我正在尝试让 djangocms-cascade 0.4.0 工作(0.3.2 似乎工作正常),但 django cms 编辑页面的下拉列表中没有选项。 我很确定我已经正确安装了它,至少大部分已经正确
正如我在标题“Django CMS 每次用户访问页面时都会打开数据库连接吗?”中提到的 问题是即使我看到了这个 page 它默认缓存我的页面,每次刷新/更改页面时都会打开一个新的 MySQL 连接。
创建新的 django-cms 项目时,安装程序不会询问任何设置问题。 runserver 启动正常,在 127.0.0.1:8000 生成了一个页面,但该页面是空白的,而不是演示页面。 除此之外
我还没有找到令人满意的方法:我有一个运行良好的 djangocms 设置。但我需要将 CMS 外部表格中的内容添加到我的主页,并在模板上呈现该内容。我可以这样做,但是在 CMS 中编辑 urls.py
因此,在 Django 1.7.7 中引入了一种处理信号的新方法。我正在使用 1.7.7 和 django_cms,在 Python 2 上运行。 我正在尝试实现这种新方法,尽管文档很少但足够简单明了
我用 djangoCMS 创建了一个网站,大量使用了 apphooks、cms 插件、向导等。我们有一个简单的应用程序,只有一个模型保存应该显示在主页上的核心数据。 models.py from dj
我已阅读文档,但似乎无法成功安装 djangocms 我正在使用虚拟环境,也试过没有它,然后是正常的安装过程。 Windows 10 操作系统和我可以很好地启动 Django 项目 我收到消息: 创建
如果用户填写表单,我编写了一个简单的 django 应用程序来存储电子邮件地址。一切正常,但是当我按照此操作时 tutorial为了将我的应用程序集成到 django-cms 中,我注意到我的表单没有
我是 Django 新手,我认为将 Aldryn 用于我的第一个真正的 Django 站点是个好主意! 我已经成功安装并实现了 Aldryn News & Blog。现在我想安装 Aldryn Sea
我有一个应用程序,它提供了一个表单来创建和更新“预测”。 url.py: urlpatterns = patterns('', url(r'^create/$', PredictionCreat
我正在开发一个 DjangoCMS 插件,它包含一个自己的 javascript 文件。该插件的 Javascript 依赖于与站点其余部分相同的库。所以,这是我现在所拥有的概念部分: Basetem
我们的 DjangoCMS 站点可以通过 http 和 https 访问。 通过 http 匿名使用是可以的。但我想禁用通过 http 登录。 有没有办法在用户想要登录时强制使用 https? 甚至登
我的 DjangoCMS 模板中有一些占位符(示例、页眉、内容和页脚)。我想使用默认项目自动填充任何新创建的页面:带有页眉插件的页眉占位符和带有页脚插件的页脚占位符。 如何实现? 最佳答案 这可以使用
我正在做 DjangoCMS 教程:http://django-cms.readthedocs.org/en/latest/introduction/plugins.html 到目前为止一切都很好,但
我是一名优秀的程序员,十分优秀!