”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > django-components v 模板现在与 Vue 或 React 相当

django-components v 模板现在与 Vue 或 React 相当

发布于2024-11-08
浏览:499

django-components v Templating is now on par with Vue or React

嘿,我是 Juro,我是 django-components 的维护者之一。在 v0.90-0.94 版本中,我们添加了一些功能,使模板中的组件使用更加灵活,类似于 JSX / Vue。

(此信息已经有点过时了(一个月前发布;最新的是 v0.101),因为我正忙着添加对 JS / CSS 变量、TypeScript 和 Sass 以及 HTML 片段的支持。令人兴奋的东西!但我意识到还没有分享此更新!)

无论如何,下面是一个 blog_post 组件,它接受从 blog_post_props 应用的标题、id 和附加 kwargs:

    {% blog_post
      title="{{ person.first_name }} {{ person.last_name }}"
      id="{% random_int 10 20 %}"
      ...blog_post_props
    / %}

以上是多个特征的组合:

1.自关闭标签:

而不是

    {% component "my_component" %}
    {% endcomponent %}

您现在可以简单地写

    {% component "my_component" / %}

2.多行标签:

django_components 现在自动配置 Django 以允许多行标签。因此,不要将所有内容都塞在一行中:

    {% component "blog_post" title="abcdef..." author="John Wick" date_published="2024-08-28" %}
    {% endcomponent %}

您可以将其分散到多行中:

    {% component "blog_post"
      title="abcdef..."
      author="John Wick"
      date_published="2024-08-28"
    / %}

3.扩展运算符:

类似于 JSX 中的 ...props 运算符或 Vue 中的 v-bind,这会将 props / kwargs 插入给定位置。

所以代替

    {% component "blog_post"
      title="abcdef..."
      author="John Wick"
      date_published="2024-08-28"
    / %}

您可以将 kwargs 放入字典中,然后应用它:

    # Python
    props = {
        "title": "abcdef...",
        "author": "John Wick",
        "date_published": "2024-08-28"
    }
    {# Django #}
    {% component "blog_post" ...props %}

4。组件输入中字符串文字内的模板标签:

您现在可以在组件输入中使用模板标签和过滤器:

    {% component 'blog_post'
      "As positional arg {# yay #}"
      title="{{ person.first_name }} {{ person.last_name }}"
      id="{% random_int 10 20 %}"
      readonly="{{ editable|not }}"
    / %}

这样您就不必每次需要格式化值时都定义额外的变量。

请注意,当只有一个标签且周围没有额外文本时,结果将作为值传递。因此“{% random_int 10 20 %}”传递一个数字,“{{ editable|not }}”传递一个布尔值。

您甚至可以更进一步,获得与 Vue 或 React 类似的体验,您可以在其中评估任意代码表达式,又名类似于:

    

这可以通过 django-expr 实现,它添加了一个 expr 标签和过滤器,您可以使用它来计算模板中的 Python 表达式:

    {% component "my_form"
      value="{% expr 'input_value if is_enabled else None' %}"
    / %}

5。支持 {% comp_name %} {% endcomp_name %} 和 TagFormatter

默认情况下,组件是使用组件标签编写的,后跟组件的名称:

    {% component "button" href="..." disabled %}
        Click me!
    {% endcomponent %}

您现在可以更改此设置(甚至可以自己制作!)。

例如,将 COMPONENTS.tag_formatter 设置为“django_components.shorthand_component_formatter”允许您编写如下组件:

    {% button href="..." disabled %}
        Click me!
    {% endbutton %}

还有更多功能即将推出,所以一定要尝试一下 django-components!

版本声明 本文转载于:https://dev.to/jurooravec/django-components-v094-templating-is-now-on-par-with-vue-or-react-4bg7?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用 JavaScript 和 Python 生成 RSA 密钥
    如何使用 JavaScript 和 Python 生成 RSA 密钥
    在当今的数字时代,确保敏感信息的安全至关重要。 RSA 是最广泛使用的加密技术之一,它通过允许安全通信和数据保护来帮助实现这一目标。如果您是想要学习如何生成 RSA 密钥对的初学者,本教程将指导您通过 JavaScript 和 Python 完成该过程。 什么是 RSA? RSA (...
    编程 发布于2024-12-22
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-22
  • 当鼠标悬停在子元素上时,如何仅使用 CSS 更改父容器的背景颜色?
    当鼠标悬停在子元素上时,如何仅使用 CSS 更改父容器的背景颜色?
    更改子级悬停时父容器的背景颜色(仅限 CSS)而有关使用 CSS 选择父元素的问题通常标记为重复,它忽略了实际解决方案的需要。特别是,当鼠标悬停在其子容器上时更改父容器的背景颜色的问题可以通过仅 CSS 方法来解决。指针事件和悬停: 为了达到这个效果,我们可以操作指针事件和:hover伪类:设置po...
    编程 发布于2024-12-22
  • 如何修复 MySQL 存储表情符号时出现“字符串值不正确”错误?
    如何修复 MySQL 存储表情符号时出现“字符串值不正确”错误?
    解决 MySQL 表情符号存储中的“字符串值不正确”错误存储包含“🎶”等表情符号的推文时,用户可能会遇到错误,指出“字符串值不正确...”此错误是由不兼容的字符编码引起的。要解决此问题问题,数据库和存储推文的表的字符集需要配置为支持 Unicode 字符。操作步骤如下:修改MySQL配...
    编程 发布于2024-12-22
  • 如何逐行读取大文本文件以避免内存过载?
    如何逐行读取大文本文件以避免内存过载?
    逐行读取大文本文件,不会造成内存超载处理超出内存容量的海量文本文件时,逐行读取,不会造成内存超载内存超载变得至关重要。一种节省内存的方法涉及直接在文件对象上使用 for 循环。与 open(...) 一起使用创建一个上下文管理器,该管理器在读取后自动关闭文件。这是一个示例:with open(&qu...
    编程 发布于2024-12-22
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-22
  • 如何在Go中使用正则表达式实现密码验证而不回溯?
    如何在Go中使用正则表达式实现密码验证而不回溯?
    Go 中使用正则表达式进行密码验证密码验证是用户身份验证和安全的一个重要方面。 Go 通过 regexp 包为正则表达式处理提供了强大的标准。本文探讨了在 Go 中使用正则表达式实现密码验证的挑战和解决方案。与许多其他语言相反,Go 的正则表达式风格不支持回溯。这对匹配复杂的密码模式造成了很大的限制...
    编程 发布于2024-12-22
  • 如何正确迭代 getElementsByClassName 并避免不可预测的行为?
    如何正确迭代 getElementsByClassName 并避免不可预测的行为?
    通过 getElementsByClassName 正确迭代使用网页时,通过类名访问元素是一项常见任务。 getElementsByClassName 方法提供一个 NodeList,它表示匹配元素的集合。但是,迭代 NodeList 可能很棘手,尤其是在修改 DOM 时。在您的情况下,您尝试迭代 ...
    编程 发布于2024-12-22
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-12-22
  • 为什么 Go 中 `func` 后面有括号?
    为什么 Go 中 `func` 后面有括号?
    理解Go中func后面括号的意义作为Go编程领域的新手,你可能会遇到在func关键字后面直接使用括号的情况。这可能会令人困惑,特别是如果您不熟悉 Go 独特的语法。让我们来解释一下这个看似神秘的功能。背后是什么(v 版本)?在 Go 中,func 后面的括号不是函数签名的一部分,而是表示方法。方法是...
    编程 发布于2024-12-22
  • 如何放宽 PHP 中的 open_basedir 限制?
    如何放宽 PHP 中的 open_basedir 限制?
    放宽 PHP 的 open_basedir 限制PHP 的 open_basedir 限制限制对指定目录树的文件访问。但是,在管理 Web 根目录之外的文件时,此限制可能会成为障碍。为了解决这个问题,您可以实施多种解决方法。一种方法是修改 Apache 的配置文件(例如 httpd.conf),以在...
    编程 发布于2024-12-22
  • 随机盐如何合并到 Bcrypt 密码存储中?
    随机盐如何合并到 Bcrypt 密码存储中?
    随机盐在 Bcrypt 密码存储中的作用bcrypt 是一种强大的密码哈希算法,它结合了随机生成的盐来增强密码安全性。了解盐如何集成到 bcrypt 中对于理解其功能至关重要。bcrypt 算法需要多个输入:密码、工作负载因子和盐。盐是随机生成的字符序列,对于每个密码哈希都是唯一的。它通过防止预先计...
    编程 发布于2024-12-22
  • 如何在Windows上访问XAMPP命令行?
    如何在Windows上访问XAMPP命令行?
    如何在Windows上访问XAMPP的命令行安装了XAMPP的Windows用户经常会遇到一个问题:如何访问XAMPP的命令行XAMPP 的命令行?这使得可以直接从命令提示符执行诸如“php phpfile.php”之类的命令。解决方案:XAMPP 不提供内置命令行界面。相反,您需要配置 Windo...
    编程 发布于2024-12-22
  • 如何按多列升序和降序对 Pandas DataFrame 进行排序?
    如何按多列升序和降序对 Pandas DataFrame 进行排序?
    按多列对 Pandas Dataframe 进行排序按多列对 Pandas Dataframe 进行排序是数据分析中的常见操作。考虑一个包含“a”、“b”和“c”列的数据框。要按“b”列升序和“c”列降序对此数据框进行排序,请按照下列步骤操作:从 Pandas 版本 0.17.0 开始,排序方法已被...
    编程 发布于2024-12-22
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-12-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3