跳转到主要内容

DjangoCMS FAQ 允许您创建包含其他插件的问题/答案插件,并提供一个API从关键字获取问题/答案!

项目描述

DjangoCMS FAQ

Django CMS的常见问题插件,具有从另一个页面加载问题的API!

安装

  1. 安装模块

    python3 -m pip install djangocms-faq
    

    或者如果您想在API中添加模糊搜索,可以使用此命令

    python3 -m pip install djangocms-faq[fuzzy_search]
    
  2. 将其添加到您的INSTALLED_APPS

        "djangocms_faq",
    
  3. 将API端点添加到您的urls.py(如果您想使用Faq搜索插件)

        path("djangocms-faq/", include("djangocms_faq.urls")),
    
  4. 启动您的django-cms网站,它应该在这里!

要求

  • django-cms:显然。
  • django-sekizai:用于默认模板(如果您使用自定义模板且不带sekizai,则可以卸载它)。不是本包的要求(它是django-cms的要求)。
  • thefuzz:如果您想使用模糊搜索,则为可选包。

特性

FAQ

添加FAQ容器插件,它有一个(隐藏且必需)名称,一个(公共且可选)标题,并且只能包含FAQ问题插件。

FAQ Container

然后,添加可以包含文本/图片/视频插件(提供答案)的FAQ问题插件。

FAQ Question

您还可以为FAQ问题添加关键词,因为您可能希望用户找到对一般问题的特定答案。

可以为问题创建别名并将其粘贴到您想放置的地方,但复制整个Faq容器或添加搜索栏会更加连贯。

不建议在非CMS页面上创建FAQ(如djangocms博客文章):搜索功能将不会工作(此插件不知道如何获取当前URL,如果它不在CMS页面对象上的占位符上)。

使用API的搜索插件

向常见问题解答(CMS)提问,插件将返回相应的问答。

快速提示:由于表单使用javascript 简单视图,这意味着即使没有javascript,搜索也可以正常工作!

另一个快速提示:搜索结果将不包括来自别名插件的条目,它只会链接到原始问题。

选择在哪个常见问题解答(CMS)中应用搜索

Select faq to search into

显示格式为 {FAQ名称} ({页面标题})

模糊搜索!

用户可能会犯错。因此,此包可以使用来自fuzzywuzzy包的token_sort_ratio函数来返回至少(>=)85%相同的字符串(您可以更改此数字)。

要启用它,只需像这样安装包

python3 -m pip install djangocms-faq[fuzzy_search]

并将此内容添加到您的设置中

DJANGOCMS_FAQ_ENABLE_FUZZY_SEARCH = True

启用模糊搜索时,仍会使用标题中的查询检测

模糊搜索

在此,"this long string"与"that long string"在87%处匹配,因此将返回该问题。

配置

  • DJANGOCMS_FAQ_ENABLE_API(默认为True):启用或禁用API端点和常见问题解答搜索插件。

    如果您创建了常见问题解答搜索插件并将其设置为False,那么您将遇到一个酷炫的KeyError 'FaqPluginSearchPublished'错误信息。请勿这样做。

  • DJANGOCMS_FAQ_MAX_QUERY_LENGTH(默认为60):对API的查询的最大长度。模块将截断用户请求至DJANGOCMS_FAQ_MAX_QUERY_LENGTH个字符。

  • DJANGOCMS_FAQ_ANSWER_PLUGINS(默认为["TextPlugin", "FilePlugin", "VideoPlayerPlugin"]):添加可以添加到您答案中的插件!

  • DJANGOCMS_FAQ_SHOW_KEYWORDS_QUESTION(默认为True):在常见问题解答的标题中显示关键词。

  • DJANGOCMS_FAQ_SHOW_KEYWORDS_ANSWER(默认为True):在答案(常见问题解答搜索插件)中显示关键词。

  • DJANGOCMS_FAQ_ENABLE_FUZZY_SEARCH(默认为False):想要使用模糊搜索?(模糊搜索

  • DJANGOCMS_FAQ_FUZZY_SEARCH_PERCENTAGE(默认为85):在返回API中两个模式(查询/问题或查询/关键词)之间的匹配之前需要达到的分数。

  • DJANGOCMS_FAQ_SEARCH_WORD_BY_WORD_KEYWORDS(默认为False):如果您想要拆分用户查询和关键词,以便在至少一个词来自查询与至少一个词来自其关键词的情况下返回一个问题。


这是不同示例的截图(配置:DJANGOCMS_FAQ_ENABLE_FUZZY_SEARCHDJANGOCMS_FAQ_SEARCH_WORD_BY_WORD_KEYWORDS

警告!请不要在关键词中使用停用词,否则您可能会得到大量的结果!

API

当您在输入框中搜索某些内容时,如果1秒内没有输入任何内容,则会使用API进行搜索(见templates/faq_search.html)。

以下是格式

[
  {
    "question": "question title",
    "slug": "question-title",
    "url": "/page-url/",
    "keywords": ["keyword", "another keyword", "..."]
  },
  {
    "question": "question title 2",
    "slug": "question-title2",
    "url": "/page-url/",
    "keywords": ["keyword", "an other key word", "..."]
  },
]

API格式

djangocms-faq/?question=keyword&search_in=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaaa%20bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbbb&draft=True

其中keyword是一个字符串,uuid是常见问题解答的合法uuid(字符串),由空格分隔,draft是要搜索的常见问题解答(CMSPlugin的草稿或实时版本)。

您可以提交不包含草稿参数的请求,脚本将只在每个常见问题解答CMSPlugin的发布(实时)版本中搜索(如draft=False)。

自定义它!

本项目包含的模板仅用于演示目的,您需要将其集成到您的图形规范中,通过在templates/faq/中创建faq_plugin.htmlfaq_question.htmlfaq_search.html文件来实现。

工作原理

FAQ容器和问题都是经典的django-cms插件,更多信息请查看cms_plugins.py

FAQ搜索插件是一个django-cms插件,并且在其之上使用了一个API端点,该端点使用原生JavaScript(默认模板使用fetch,它不兼容IE)。

API端点是一个返回json的单个视图(请参阅views.py)。

由于从"问题"字符串获取答案的函数被使用了两次(在API视图和在FaqPluginSearchPublisher插件中),我已经将它放在一个名为utils.py的文件中。

在模糊搜索模式下,如果查询是问题的子串,或者问题与查询或关键词与查询之间的分数大于等于DJANGOCMS_FAQ_FUZZY_SEARCH_PERCENTAGE(默认=85%),则返回结果。

当发布一个包含用于搜索表单的FAQ的页面时,copy_relations函数将使用名为RelationSearchFaq的类更新FAQ的id(该类存储了FaqPluginModelSearchFaqPluginModel的uuids)。

这里是问题的一个糟糕的示意图,以及这里是当前解决方案的另一个糟糕的示意图

这是解决处理CMSPlugins之间关系问题的自定义和解决方案。

当关系从一个插件复制到另一个插件时,管理关系的复制会更加困难。

来源:Django-cms文档,处理关系 > 插件间的关系.

项目详情


下载文件

下载您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

djangocms_faq-1.5.2.tar.gz (32.4 kB 查看哈希值)

上传时间:

构建分布

djangocms_faq-1.5.2-py3-none-any.whl (34.8 kB 查看哈希值)

上传时间: Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面