python - 在 django 中使用 flash 文本
问题描述
我正在尝试在 django中使用Flash 文本。我认为KeyWordProcessor
应该只调用一次。所以我在 settings.py 文件中定义它是这样的:
设置.py
KEYWORD_PROCESSOR = None
然后我KeywordProcessor()
在应用程序启动时调用函数,如下所示:
应用程序.py
from django.apps import AppConfig
class MywebappConfig(AppConfig):
name = 'mywebapp'
def ready(self):
import mywebapp.signals
from flashtext import KeywordProcessor
from django.conf import settings
from mywebapp.utils import add_all_kewords_to_flash_text
import threading
settings.KEYWORD_PROCESSOR = KeywordProcessor()
add_all_kewords_to_flash_text()
t1 = threading.Thread(target=add_all_kewords_to_flash_text)
t1.start()
实用程序.py
def add_keyword_to_flash_text(keyword_obj):
if not settings.KEYWORD_PROCESSOR:
raise ValueError("Flash text is None")
added = settings.KEYWORD_PROCESSOR.add_keywords_from_dict(
{keyword_obj.keyword: [keyword_obj.keyword]+keyword_obj.tags}
)
def add_all_kewords_to_flash_text():
add_all_kewords = [add_keyword_to_flash_text(k) for k in KeyWord.objects.all()]
但我收到此错误:ValueError: Flash text is None
解决方案
设置文件用于定义常量,您不应该尝试改变常量(即它是不可变的)。
加载后无法更改设置。所以试图做
settings.KEYWORD_PROCESSOR = KeywordProcessor()
不会工作。
仔细查看文档
您可能最好编写一个类来处理这个问题,并在应用程序配置就绪方法中启动该类。
class MyKeywordProcessor:
def __init__(self):
self.keyword_processor = KeywordProcessor()
然后在应用配置中
class MywebappConfig(AppConfig):
name = 'mywebapp'
def ready(self):
...
keyword_processor = MyKeywordProcessor()
add_all_kewords_to_flash_text(keyword_processor)
...
如您所见,我已将关键字处理器传递给您的add_all_kewords_to_flash_text
函数,该函数是 KeywordProcessor 对象的实例。
推荐阅读
- oracle - Oracle - 获取游标中的函数参数值
- javascript - 字符串“<3”和“:)”的正则表达式模式是什么?
- c - 如何使用适用于 Windows 和 Android 的 Makefile 构建 SDL2
- sql - 使用 SQL 按时间对记录进行聚类
- linux - 如何查找目录中特定文件的磁盘使用总量
- ruby-on-rails - 使用 Rails Rspec 进行测试 - 预期和得到的不匹配
- java - JDK 11 可以自动更新吗?
- javascript - 用户输入时如何在表中动态添加一行(postman-style-reactive-table)
- java - 可见时 JXTable 高 cpu
- puppet - 使用 puppet 维护 mysql 配置