无痛链接处理-无论是自定义模型、文件或CMS页面

LinkIt的Python项目详细描述


链接

linkit为您提供了一个新的字段类型LinkField,可以在模型上使用,它允许您轻松地链接到站点上的不同模型。这可能是一个django cms页面模型, 文件管理器文件或任何自定义的,如新闻模型。

安装

用pip安装最新版本,并将linkit添加到您的INSTALLED_APPS中,您就可以开始了。

$ pip install LinkIt

用法

您现在可以在任何型号上使用新的LinkField

fromdjango.db.modelsimportModel,CharFieldfromlinkit.model_fieldsimportLinkFieldclassFoo(Model):title=CharField(max_length=255)link=LinkField(types=['page','file','input'])# <-- Yay!

如果您在django admin中注册这个模型,您将得到一个下拉字段,YRU可以在其中选择CMS页面、文件管理器文件或只是一个简单的输入字段。 您的模型现在可以用一个字段链接到这些实体中的任何一个。

在模板中,您可以使用如下链接字段:

<ahref="{{ instance.link.href }}"target="{{ instance.link.target }}">{{ instance.link.label }}</a>

配置

LinkField接受一些选项,这些选项将定义呈现的小部件的外观以及内容编辑器有哪些选项:

  • types: list = None定义允许的链接类型(请参阅«类型»一节中的更多内容)
  • allow_target: bool = False如果设置为true,小部件将呈现一个复选框,以便编辑器可以选择链接的_target
  • allow_label: bool = True呈现附加的输入字段,以便可以设置自定义标签
  • allow_no_follow: bool = False如果设置为true,小部件将呈现一个复选框,以便编辑器可以为链接选择rel="nofollow"

类型

开箱即用的链接有三种类型:输入、文件、页面。LinkType基类使得实现自己的链接类型变得很容易,无论 可能是的。如果您想链接到应用程序中的另一个现有模型,例如新闻,那么您需要做的就是注册一个新的链接类型。

  1. 在任何应用程序中创建文件link_types.py
fromlinkit.types.modelimportModelLinkTypeclassNewsLinkType(ModelLinkType):identifier='news'type_label='News'model=News
  1. 注册新类型,最好在AppConfigready方法中:
fromdjango.appsimportAppConfigfromdjango.utils.translationimportugettext_lazyas_classContentConfig(AppConfig):name='contents'defready(self):fromcontents.link_typesimportNewsLinkTypefromlinkit.typesimporttype_manageraslinkit_managerlinkit_manager.register(NewsLinkType)
  1. 利润!现在,您可以在任何模型上创建这样的字段:link = LinkField(types=['news', 'page]),并链接到任何新闻或cms页面。

检查linkit/types以查看如何实现核心类型。

电子邮件类型示例

假设我们有一个完全不同的新类型想要实现,并且不能仅仅从ModelLinkType扩展。参见下面的示例 用于链接到具有可选主题字段的电子邮件地址的链接类型。

classEmailTypeForm(TypeForm):address=EmailField(label='E-Mail',required=True)subject=CharField(label='Subject',required=False,max_length=20)classEmailType(LinkType):identifier='email'type_label='E-Mail'form_class=EmailTypeFormdefreal_value(self):returnself.link.data('value')@propertydefhref(self)->Optional[str]:mail=self.real_value().get('address')subject=self.real_value().get('subject','')returnf'mailto:{mail}?subject={subject}'@propertydeflabel(self)->Optional[str]:returnself.real_value().get('address')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android在用户按下硬键时如何从选项卡式片段中获取数据?   java Android改造循环请求不执行回调   参考解释Java中的链表数据结构   java如何查找@EntityListeners调用期间更改的字段   当我试图通过socket流发送/接收jxrpc时出现java“socket关闭”错误   java Javafx组合框自动完成返回错误   java引用集合上带有@DBRef注释的文档   Bouncy Castle在C中没有从Java解密DoFinal#   PHP中未签名的右移/Zerofill Right Shift/>(Java/JavaScript等效)   为什么apache java http库不能处理ContentEncoding:none的站点?   java如何在其他页面的文本视图中显示logcat?   java可以有效地更改字符串中的EOL字符   java向Spring Boot应用程序添加页面(非常基本)   java Android Studio Gradle项目“无法启动守护进程”   仅在第一行使用XOR JAVA进行加密解密   intellij idea Java层分离模块之间的循环依赖关系